Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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);
}
  1. sockfd reprezintă descriptorul de fişier obţinut în urma apelului socket(),
  2. backlog indică 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.