Functia send

    Functia send() trimite date printr-un socket conectat.

Sintaxa

int send (

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

unde:

Functia send() se foloseste pentru a scrie date printr-un socket conectat. Pentru socketuri orientate pe mesaj, trebuiesc loate precautii pentru a nu se depasii dimensiunea maxima a pachetului , care poate fi obtinuta citind valoarea optiunii SO_MAX_MSG_SIZE. Daca datele depasesc aceasta lungime pentru a trece automat prin protocolul de folosit va apare o eroare (WSAEMSGSIZE ) si datele nu sunt transmise.

    De retinut ca indeplinirea cu succes a functiei send() nu indica ca datele au ajuns la destinatie in conditii bune.

    Daca nu este disponibil nici un spatiu in sistemul de transport, send() va bloca aplicatia exceptand situatia cand socketul a fost trecut in modul de intrare/iesire fara blocare. Pe socketuri orientate pe streamuri fara blocare, numarul de octeti poate fi intre 1 si lungimea necesara, depinzand de dimensiunea bufferul disponibil la ambele capete ale conexiunii. Functia select() (sau functiile WSAAsyncSelect() sau WSAEventSelect()) poate fi utilizata pentru a determina cand este este posibila transmiterea urmatoarelor date.

    Apelarea functiei send() cu o lungime zero va fi tratata de implementare ca o operatie indeplinita cu succes. In acest caz, send poate intoarce zero ca o valoare ce specifica indeplinirea cu succes a functiei. Pentru socketurile orientate pe mesaj, o datagrama de lungime zero este transmisa.

    Parametrul flags poate fi folosit pentru a influenta comportarea functiei in afara optiunilor specificate de socketul asociat. Adica, semantica acestei functii este determinata de optiunile pentru socket si de parametrul flags.

Valoarea returnata

Daca nici o eroare nu apare, functia send() intoarce numarul total de octeti trimisi. De retinut ca acesta poate fi mai mic decat parametrul indicat prin len. In caz de eroare, este returnata o valoare SOCKET_ERROR (codul erorii poate fi obtinut apeland WSAGetLastError).

Cornel Mironel Niculae, 2004-2005
13-Nov-2004