Functia recv

Functia recv() primeste date de le un socket.

Sintaxa

int recv (

SOCKET s, 
char FAR* buf, 
int len, 
int flags 
);
 

unde:

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. 

Valoarea returnata

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