recv
Functia recv() primeste date de le un socket.
int recv (
SOCKET s,
char FAR* buf,
int len,
int flags
);
unde:
s - [in] este un descriptor ce identifica un socket.buf - [out] este un pointer catre un buffer pentru datele care vinlen - [in] lungimea bufferului buf.flags - [in] specifica modul in care se face apelul.Aceasta functie se utilizeaza cu socketuri conectate sau socketuri legate fara conexiune si este utilizata pentru citirea datelor de intrare.
Pentru un socket orientat pe stream (de exemplu, tipul SOCK_STREAM), este
returnata atata informatie cat este disponibila curent sau pana la dimensiunea
bufferului cu care lucreaza.
Pentru socketuri orientate pe mesaje (cum este tipul SOCK_DGRAM), datele sunt extrase din prima datagrama din coada de datagrame (mesaje) sosita de la destinatia specificata in apelul dfunctiei connect. Daca este neconectat, socketul trebuie legat si nu exista restrictii asupra adresei sursa pentru datagramele receptionate. Daca datagrama sau mesajul este mai mare decat bufferul folosit, bufferul este unplut cu prima parte a datagramei si functia recv genereaza eroarea WSAEMSGSIZE. Pentru protocoale nesigure (de exemplu, UDP) excesul de date este pierdut, pentru protocoale sigure datele sunt retinute de catre furnizorul de serviciu pana cand sunt citite cu succes prin apelarea funtiei recv cu un buffer suficient de mare.
Daca nici un fel de date nu sunt disponibile la socket, functia recv asteapta sosirea datelor cu exceptia situatiei cand socketul este fafa blocare. In acest caz, o valoare SOCKET_ERROR este returnata cu codul de eroare WSAEWOULDBLOCK. Functiile select, WSAAsyncSelect, sau WSAEventSelect pot fi folosite pentru a determina cand sunt disponibile alte date.
Daca socketul este orientat pe conexiune si capatul indepartat al conexiunii inchide conexiunea in mod gratios, functia recv recv va completa cu zero octetii primiti. Daca conexiunea a fost resetata, functia recv recv va determina aparitia erorii WSAECONNRESET.
Parametrul flags poate fi folosit pentru a influenta comportarea functiei invocate dincolo de optiunile pentru socketul specificat. Adica, semantica acestei functii este determinata atat de optiunile pentru socket cat si de parametrul flags.
Daca nu apar erori, functia recv() intoarce numarul efectiv de
octeti receptionati. Daca conexiunea a fost inchis cu gratie, valoarea returnata
este zero. In alte situatii, este returnata o valoare SOCKET_ERROR
si codul erorii poate fi aflat prin apelarea functiei WSAGetLastError().
![]()
© Cornel Mironel Niculae, 2004-2005
13-Nov-2004