listen()
Comunicaţia prin conexiune stabilă este asimetrică. Mai precis, unul din cele două procese implicate joacă rol de server, iar celălalt joacă rol de client. Cu alte cuvinte, serverul trebuie să îi asocieze socketului propriu o adresă pe care oricare client trebuie să o cunoască, şi apoi să “asculte” pe acel socket cererile ce provin de la clienţi. Mai mult decât atât, în timp ce serverul este ocupat cu tratarea unei cereri, există posibilitatea de a întârzia cererile ce provin de la alţi clienţi, prin plasarea lor într-o coadă de aşteptare. Setarea unui socket pentru a fi pasiv se face prin intermediul funcției neblocante slisten():
#include <sys/types.h>
#include <sys/socket.h>
int listen(int sockfd, int backlog);
/* Usage example: After calling bind in the server,
we create a queue for most 5 connections.
More than 5 connections might be accepted, but not waiting for connection at the same time. */
if ((listen(sockfd, 5)) != 0) {
printf("Listen failed...\n");
exit(0);
}
sockfdreprezintă descriptorul de fişier obţinut în urma apeluluisocket(),backlogindică numărul de conexiuni acceptate în coada de aşteptare.
Conexiunile care se fac de către clienți vor aştepta în aceasta coadă până când se face accept().
Nu pot fi mai mult de backlog conexiuni în aşteptare.
Apelul listen() întoarce 0 în caz de success şi -1 în caz de eroare.