socket | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
NOM | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SYNOPSIS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
DESCRIPTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Fonctions de la couche socket | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
send(2), sendto(2), et sendmsg(2) envoient des données sur une socket, et recv(2), recvfrom(2), recvmsg(2) reçoivent des données depuis une socket. poll(2) et select(2) attendent que des données arrivent ou que l'émission soit possible. De plus, les opérations d'entrées-sorties standards comme write(2), writev(2), sendfile(2), read(2), et readv(2) peuvent servir à écrire ou lire des données.
getsockname(2) renvoie l'adresse locale d'une socket et getpeername(2) renvoie l'adresse de la socket distante. getsockopt(2) et setsockopt(2) servent à fixer ou lire des options du niveau socket ou protocole. ioctl(2) peut servir pour lire ou écrire d'autres options.
close(2) sert à fermer une socket. shutdown(2) ferme un sens de communication d'une socket full-duplex connectée.
Le positionnement, ou l'utilisation de pread(2) et pwrite(2) avec un décalage non-nul n'est pas possible sur les sockets
On peut faire des entrées-sorties non-bloquantes sur les sockets en fixant l'attribut O_NONBLOCK sur le descripteur de la socket avec fcntl(2). Ensuite toutes les opérations qui devraient normalement bloquer se terminent immédiatement avec l'erreur EAGAIN (l'opération devra être retentée ultérieurement). connect(2) renverra l'erreur EINPROGRESS. L'utilisateur peut alors attendre divers événements avec poll(2) ou select(2).
Événement E/S | ||
Événemt | Poll | Occurrence |
Lecture | POLLIN |
De nouvelles données sont arrivées.
|
Lecture | POLLIN |
Une connexion est établie
(pour les sockets orientées connexion)
|
Lecture | POLLHUP |
Déconnexion du correspondant.
|
Lecture | POLLHUP |
Connexion rompue (seulement pour les protocoles orientés connexion).
Si on écrit sur la socket, le signal
SIGPIPE
est aussi émis.
|
Écriture | POLLOUT |
La socket a assez de place dans le
tampon d'émission pour écrire de nouvelles données. |
Lect/Écrit. |
POLLIN
POLLOUT |
Un
connect(2)
en attente est terminé.
|
Lect/Écrit. | POLLERR | Une erreur asynchrone s'est produite |
Lect/Écrit. | POLLHUP |
Le correspondant à clos un sens de communication
|
Exception | POLLPRI |
Données urgentes arrivées, le signal
SIGURG
est alors envoyé.
|
Une alternative à l'utilisation de poll(2) et select(2) est de laisser le noyau informer l'application à propos des événements par l'intermédiaire d'un signal SIGIO. Pour cela l'attribut O_ASYNC doit être placé sur le descripteur de la socket via fcntl(2) et un gestionnaire de signal pour SIGIO doit être installé avec sigaction(2). Voir les remarques sur les Signaux plus bas.
Options des sockets | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
struct linger { int l_onoff; /* actif */ int l_linger; /* délai maximal */ };
Signaux | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Lorsqu'on le demande avec l'option FIOSETOWN de fcntl(2) ou l'option SIOCSPGRP de ioctl(2), le signal SIGIO est envoyée quand un événement d'entrée-sortie se produit. Il est possible d'utiliser poll(2) ou select(2) dans le gestionnaire de signal pour savoir sur quelle socket l'événement s'est produit. Une alternative (sous Linux 2.2) est de demander un signal temps réel avec le fnctl(2) F_SETSIG. Le gestionnaire du signal temps réel sera invoqué avec le descripteur de fichier dans le champ si_fd de siginfo_t. Voir fcntl(2) pour plus d'informations.
Dans certains cas (par exemple différents processus accédant à la même socket), la condition ayant déclenché le SIGIO peut avoir disparu quand le processus réagit au signal. Si cela se produit, le processus doit attendre à nouveau car Linux lui renverra le signal ultérieurement.
Sysctls | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Ioctls | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
error = ioctl(ip_socket, ioctl_type, &value_result);
Opérations fcntl(2) valides :
VERSIONS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
NOTES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Linux ne permettra la réutilisation des ports qu'avec l'option SO_REUSEADDR lorsque cette option sera positionnée à la fois par le précedent programme qui a effectué un bind(2) sur le port et par le programme qui veut réutiliser le port. Ceci est différent sur certaines implémentations (par exemple, FreeBSD) où seul le dernier programme doit positionner l'option SO_REUSEADDR. Typiquement, cette différence est invisible depuis que, par exemple, un programme serveur est conçu pour toujours positionner cette option.
BOGUES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
VOIR AUSSI | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
TRADUCTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 11 juin 2001, mise à jour par Alain Portal <aportal AT univ-montp2 DOT fr> le 4juillet 2005 et révisée le 8 janvier 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 7 socket ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Sommaire | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
Table des mots clés | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
FIOASYNC | Ioctls |
FIOGETOWN | Ioctls |
FIOSETOWN | Ioctls |
message_cost et message_burst | Sysctls |
netdev_max_backlog | Sysctls |
optmem_max | Sysctls |
rmem_default | Sysctls |
rmem_max | Sysctls |
SIOCGPGRP | Ioctls |
SIOCGSTAMP | Ioctls |
SIOCSPGRP | Ioctls |
SO_ACCEPTCONN | Options des sockets |
SO_BINDTODEVICE | Options des sockets |
SO_BROADCAST | Options des sockets |
SO_BSDCOMPAT | Options des sockets |
SO_DEBUG | Options des sockets |
SO_DONTROUTE | Options des sockets |
SO_ERROR | Options des sockets |
SO_KEEPALIVE | Options des sockets |
SO_LINGER | Options des sockets |
SO_OOBINLINE | Options des sockets |
SO_PASSCRED | Options des sockets |
SO_PEERCRED | Options des sockets |
SO_PRIORITY | Options des sockets |
SO_RCVBUF | Options des sockets |
SO_RCVBUFFORCE (depuis Linux 2.6.14) | Options des sockets |
SO_RCVLOWAT et SO_SNDLOWAT | Options des sockets |
SO_RCVTIMEO et SO_SNDTIMEO | Options des sockets |
SO_REUSEADDR | Options des sockets |
SO_SNDBUF | Options des sockets |
SO_SNDBUFFORCE (depuis Linux 2.6.14) | Options des sockets |
SO_TIMESTAMP | Options des sockets |
SO_TYPE | Options des sockets |
wmem_default | Sysctls |
wmem_max | Sysctls |