Functia connect

Functia connect function stabileste o conexiune cu un corespondent.

Sintaxa

int connect (

SOCKET s, 
const struct sockaddr FAR* name, 
int namelen 
); 

unde:

Aceasta functie este utilizata pentru a creea o conexiune cu o un corespundent specificat. Daca socketul, s, este nelegat, o valoare unica este atribuita pentru adresa locala este atribuita de catre sistem si sochetul este marcat ca legat.

Pentru socketuri orientate pe conexiune (de exemplu, tipul  SOCK_STREAM), o conexiune activa este initiata cu un host indepartat folosind parametrul name (o adresa in spatiun de nume al unui socket; pentru detalii vezi functia  bind). Atunci cand apelul reuseste, socketul devine apt sa trimita si sa primeasca data. Daca campul de adresa din structura name este unpluta cu zero, functia connect va intoarce o eroare (WSAEADDRNOTAVAIL in Windows). Orice incercare de reconectare a unei active conexiuni va conduce de asemenea la o eroare (WSAEISCONN).

Pentru un socket fara conexiune (de exemplu, tipul SOCK_DGRAM), operatia efectuata de catre functia connect are doar rolulde a stabili o adresa default pentru apelurile ulterioare ale functiilor send/WSASend si recv/WSARecv. Orice datagrama receptionata de la o adresa alta decat adresa destinatie specificata va fi inlaturata.

Daca campul de adresa al structurii name este umplut cu zero, socketul va fi "de-conectat." Atunci, adresa indepartata va fi nedeterminata, astfel incat apelurile send/WSASend si  recv/WSARecv vor returna o eroare ( WSAENOTCONN). Totusi, sendto/WSASendTo si recvfrom/WSARecvFrom pot fi in continuare utilizate. Destinatia default poate fi schimbata apeland din nou functia connect, chiar daca socketul este deja "connected". Orice datagrame din coada de asteptare pentru receptie sunt inlaturate daca numele este diferit de cel al conexiunii precedente.

Pentru socketurile fara conexiune, name poate indica orice adresa valida, inclusiv o adresa de broadcast. Totusi, pentru a conecta o o adresa broadcast, un socket trebuie sa aiba setata optiunea SO_BROADCAST  (setarea se face cu functia setsockopt). Altfel, functia connect va intoarce eroarea WSAEACCES.

Valoare returnata

Daca nu apare nici o eroare, functia connect va returna zero. In caz de eroare, ea intoarce SOCKET_ERROR (si un de eroare specific poate fi obtinut in window apeland WSAGetLastError).

Pe un socket cu blocare, valoarea returnata indica succes sau esec al incercarii de conectare.

Cu un socket fara blocare, incercarea de conectare nu poate fi completata imediat. In acest caz, connect va intoarce  SOCKET_ERROR, si WSAGetLastError va returna WSAEWOULDBLOCK. In acest caz, aplicatia poate:

1. Folosi functia select pentru a determina indeplinirea cererii de conectare verificand daca se poate scrie la socket, sau
2. Daca aplicatia utilizeaza WSAAsyncSelect pentru a indica interes pentru evenimentele referitoare la conectare, atunci aplicatia va primi mesajul FD_CONNECT cand operatia de conectare este completa, sau

3. Daca aplicatia utilizeaza WSAEventSelect pentru a indica interes pentru evenimentele referitoare la conectare, atunci obiectul eveniment asociat va fi semnalat cand operatia este completa.

In cazul unui socket fara blocare, pana cand conexiunea se face toate apelarile ulterioare a functiei connect asupra aceluiasi socket vor determina o eroare (WSAEALREADY).

Daca codul erorii indica esuarea incercarii de conectare (adica, WSAECONNREFUSED, WSAENETUNREACH, WSAETIMEDOUT) aplicatia poate apela din nou functia connect pentru acelasi socket.

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