accept


#include <sys/types.h>
#include <sys/sochet.h>
 
int accept(int s, struct sockaddr *addr, int *addrlen);
Après un listen, un serveur connection-oriented peut attendre une demande de connexion d'un client par accept.

accept extrait la première demande de connexion en attente et crée un nouveau socket ayant les mêmes propriétés que s. S'il n'y a pas de demande en attente, accept bloque le processus appelant jusqu'à l'arrivée d'une demande.

peer_addr est un argument résultat qui retourne l'adresse (socket) du client connecté.

addrlen est un argument valeur-résultat : avant l'appel, il pointe vers la taille effective de la structure retournée.

Le socket s passé à accept n'a que 3 éléments de son association définis : le protocole, l'adresse locale et le port local. Le nouveau socket retourné par accept a son association complètement définie. Le socket s par contre reste dans le même état. Ceci permet au processus d'accepter d'autres connexions sur le même socket (serveur concurrent).

accept retourne -1 en cas d'erreur sinon le descripteur du socket.

Exemple:

fromlen = sizeof(struct sockaddr_in);
s1 = accept(s,(struct sockaddr *)peer_addr,&fromlen))
retourne dans s1, un nouveau descripteur de socket possédant les mêmes propriétés que s et dans peer_addr, les informations à propos du client qui vient d'établir la connexion. fromlen est initialisé après l'appel système à la taille effective de peer_addr.