table of contents
other languages
other sections
ACCEPT(2) | Manuel du programmeur Linux | ACCEPT(2) |
NOM¶
accept - Accepter une connexion sur une socketSYNOPSIS¶
#include <sys/types.h> /* Consultez NOTES */ #include <sys/socket.h> int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); #define _GNU_SOURCE /* Consultez feature_test_macros(7) */ #include <sys/socket.h> int accept4(int sockfd, struct sockaddr *addr, socklen_t *addrlen, int flags);
DESCRIPTION¶
L'appel système accept() est employé avec les sockets utilisant un protocole en mode connecté ( SOCK_STREAM, SOCK_SEQPACKET). Il extrait la première connexion de la file des connexions en attente de la socket sockfd à l'écoute, crée une nouvelle socket et alloue pour cette socket un nouveau descripteur de fichier qu'il renvoie. La nouvelle socket n'est pas en état d'écoute. La socket originale sockfd n'est pas modifiée par l'appel système. L'argument sockfd est une socket qui a été créée avec la fonction socket(2), attachée à une adresse avec bind(2), et attend des connexions après un appel listen(2).- SOCK_NONBLOCK
- Placer l'attribut d'état de fichier O_NONBLOCK sur le nouveau descripteur de fichier ouvert. Utiliser cet attribut économise des appels supplémentaires à fcntl(2) pour obtenir le même résultat.
- SOCK_CLOEXEC
- Placer l'attribut « close-on-exec » (FD_CLOEXEC) sur le nouveau descripteur de fichier. Consultez la description de l'attribut O_CLOEXEC dans open(2) pour savoir pourquoi cela peut être utile.
VALEUR RENVOYÉE¶
S'ils réussissent, ces appels système renvoient un entier positif ou nul, qui est un descripteur pour la socket acceptée. En cas d'erreur, ils renvoient -1 et remplissent errno avec le code d'erreur.Traitement des erreurs¶
Sous Linux, accept() (et accept4()) renvoie les erreurs réseau déjà en attente sur la socket comme une erreur de l'appel système. Ce comportement diffère d'autres implémentations des sockets BSD. Pour un comportement fiable, une application doit détecter les erreurs réseau définies par le protocole après le accept() et les traiter comme des erreurs EAGAIN, en réitérant le mécanisme. Dans le cas de TCP/IP, ces erreurs sont ENETDOWN, EPROTO, ENOPROTOOPT, EHOSTDOWN, ENONET, EHOSTUNREACH, EOPNOTSUPP, et ENETUNREACH.ERREURS¶
- EAGAIN ou EWOULDBLOCK
- La socket est marquée comme étant non bloquante et aucune connexion n'est présente pour être acceptée. POSIX.1-2001 permet de renvoyer l'une ou l'autre des erreurs dans ce cas et n'exige pas que ces constantes aient la même valeur. Une application portable devrait donc tester les deux possibilités.
- EBADF
- Le descripteur est invalide.
- ECONNABORTED
- Une connexion a été abandonnée.
- EFAULT
- addr n'est pas dans l'espace d'adressage accessible en écriture.
- EINTR
- L'appel système a été interrompu par l'arrivée d'un signal avant qu'une connexion valide ne survienne ; consultez signal(7).
- EINVAL
- La socket n'est pas en attente de connexions, ou addrlen est invalide (par exemple négatif).
- EINVAL
- (accept4()) flags contient une valeur incorrecte.
- EMFILE
- La limite du nombre total de descripteurs de fichier ouverts par processus a été atteinte.
- ENFILE
- La limite du nombre total de fichiers ouverts sur le système a été atteinte.
- ENOBUFS, ENOMEM
- Pas assez de mémoire disponible. En général, cette erreur est due à la taille limitée du tampon des sockets, et non à la mémoire système proprement dite.
- ENOTSOCK
- Le descripteur n'est pas celui d'une socket.
- EOPNOTSUPP
- La socket utilisée n'est pas de type SOCK_STREAM.
- EPROTO
- Erreur de protocole.
- EPERM
- Les règles du pare-feu interdisent la connexion.
VERSIONS¶
L'appel système accept4() est disponible depuis Linux 2.6.28 ; la prise en charge dans la glibc est disponible depuis la version 2.10.CONFORMITɶ
accept() : POSIX.1-2001, SVr4, BSD 4.4 (accept() est apparu dans BSD 4.2).NOTES¶
POSIX.1-2001 ne requiert pas l'inclusion de <sys/types.h>, et cet en‐tête n'est pas nécessaire sous Linux. Cependant, il doit être inclus sous certaines implémentations historiques (BSD), et les applications portables devraient probablement l'utiliser.Le type socklen_t¶
Le troisième argument de accept() était, à l'origine, déclaré comme un int * (ceci dans libc4 et libc5 ainsi que pour beaucoup d'autres systèmes comme BSD 4.x, SunOS 4, SGI). Une proposition de standard POSIX.1g l'a modifié en size_t * et c'est ce qu'utilise SunOS 5. Les dernières propositions POSIX en ont fait un socklen_t *, ce que suivent la Single UNIX Specification et la glibc2. Pour citer Linus Torvalds :EXEMPLE¶
Consultez bind(2).VOIR AUSSI¶
bind(2), connect(2), listen(2), select(2), socket(2), socket(7)COLOPHON¶
Cette page fait partie de la publication 3.44 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse <http://www.kernel.org/doc/man-pages/>.TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>. Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009). Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le paquet manpages-fr. Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C <section> <page_de_man> ».10 septembre 2010 | Linux |