connect
Functia connect function stabileste o conexiune cu un corespondent.
int connect (
SOCKET s,
const struct sockaddr FAR* name,
int namelen
);
unde:
s - [in] este un descriptor identificand un socket neconectat.name - [in] este numele corespondentului la care se va conecta
sochetul.namelen - [in] este lungimea efectiva a numelui name
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