Functia listen

Functia listen asteapta cereri de conectare la un socket specificat.

Sintaxa

int listen (

SOCKET s, 
int backlog 
); 

unde:

Pentru a accepta conexiuni, un socket este mai intai creat cu functia socket, o valoare backlog pentru cererile de conexiuni este specificata cu functia listen si apoi conexiunile sunt acceptate cu functia accept. Functia listen se foloseste numai pentru socketuri orientate pe conexiune, de exeamplu, acelea ar caror tip este SOCK_STREAM. Socketul s este trecut in modul pasiv in care cererile de conectare sunt confirmate si stau la coada de asteptate pentru a fi acceptate de catre proces (aplicatie). Aceasta functie este utilizata de regula de catre servere care pot avea mai mult de o cerere de conectare la un moment dat: Daca o cerere de conectare soseste cand coada de asteptare este plina, clientul va primii o eroare cu o indicatie WSAECONNREFUSED.

Functia listen incearca sa funtioneze corect si atunci cand nu mai sunt disponibile descriptori. Functia listen() va accepta conectari pana cand coada de asteptarese goleste. Daca descriptorii devin disponibili, un apel ulterior al functiei listen() sau accept() va reumple coada de asteptare pana la valoarea cea mai recenta a  backlog, daca este posibil, si reia ascultarea pentru cererile de conectare.

O aplicatie poate apela listen() mai mult de o singura data pentru un singur socket. Aceasta are efectul de aducere la zi a valorii backlog pentru socketul de ascultare. Se poate intampla ca lungimea actuala a cozii de asteptare sa fie mai mica decat noua valoare a backlog, cererile de conexiuni in exces vor fi resetate si inlaturate.

Parametrul backlog este linitat (in mod tacit) la o valoare rezonabila determinata de furnizorul de serviciu. O valoare ilegala este inlocuita de cea mai apropiata valoare legala.

Valoare returnata

Daca nu apar erori, functia listen intoarce zero. In caz de eroare este returnata o valoare SOCKET_ERROR si un cod specific de eroare se poate afla apeland functia WSAGetLastError.

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