Provided by:
manpages-fr_1.67.0-1_all 
NOM
socket - Interface Linux des sockets.
SYNOPSIS
#include <sys/socket.h>
mysocket = socket(int socket_family, int socket_type, int protocol);
DESCRIPTION
Cette page de manuel documente l’interface utilisateur de
l’implémentation Linux des sockets réseau. Les sockets compatibles BSD
représentent une interface uniforme entre le processus utilisateur et
les piles de protocoles réseau dans le noyau. Les modules des
protocoles sont groupés en familles de protocoles comme PF_INET,
PF_IPX, PF_PACKET et en types de sockets comme SOCK_STREAM ou
SOCK_DGRAM. Voir socket(2) pour plus de détails sur les familles et
les types de sockets.
FONCTIONS DE LA COUCHE SOCKET
Ces fonctions servent à un processus utilisateur pour envoyer ou
recevoir des paquets et pour faire d’autres opérations sur les sockets.
Pour plus de détails, voir leurs pages de manuel respectives.
socket(2) crée une socket, connect(2) connecte une socket à une adresse
de socket distante, la fonction bind(2) attache une socket à une
adresse locale, listen(2) indique à la socket que de nouvelles
connexions doivent y être acceptées, et accept(2) fournit une nouvelle
socket avec la nouvelle connexion entrante. socketpair(2) renvoie deux
sockets anonymes connectées (seulement implémenté pour quelques
familles locales comme PF_UNIX)
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 |
| | | buffer d’émission pour écrire de |
| | | nouvelles données. |
+------------+---------+--------------------------------------+
|Lect/Écrit. | POLLIN | Un connect(2) en attente est |
| | POLLOUT | 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/select est de laisser le noyau
informer l’application à propos des événements par l’intermédiaire d’un
signal SIGIO. Pour cela l’attribut FASYNC 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
Ces options communes à toutes les sockets peuvent être écrites en
utilisant setsockopt(2) et lues avec getsockopt(2) avec le niveau
socket positionné sur SOL_SOCKET.
SO_KEEPALIVE
Valide l’émission de messages périodiques gardant la socket
ouverte pour les sockets orientées connexion. Il s’agit d’un
attribut entier booléen.
SO_OOBINLINE
Si cette option est activée, les données hors-bande sont placées
directement dans le flux de données reçues. Sinon elles ne sont
transmises que si l’attribut MSG_OOB est demandé durant la
réception.
SO_RCVLOWAT et SO_SNDLOWAT
Indiquent le nombre minimal d’octets dans le buffer pour que la
couche socket passe les données au protocole (SO_SNDLOWAT) ou à
l’utilisateur en réception (SO_RCVLOWAT). Ces deux valeurs ne
sont pas modifiables sous Linux et la taille de leur argument
est toujours fixée à un octet. getsockopt peut lire les
valeurs, mais setsockopt renverra toujours ENOPROTOOPT.
SO_RCVTIMEO et SO_SNDTIMEO
Indiquent le délai maximal d’émission ou de réception avant de
renvoyer une erreur. Le paramètre est une structure timeval. Si
une fonction d’entrée ou de sortie bloque pendant cet intervalle
de temps et qu’une donnée a été envoyée ou reçue, la valeur de
retour de cette fonction sera le nombre de données transmises ;
si aucune donnée n’a été transmise et que le délai d’attente est
atteint, -1 est renvoyé et errno est positionnée à EAGAIN ou
EWOULDBLOCK +. comme si la socket avait été spécifiée comme non
bloquante. Si le délai d’attente est défini à zéro (la valeur
par défaut), l’opération ne sera jamais interrompue (Ndt : elle
devient bloquante).
SO_BSDCOMPAT
Valider une compatibilité bogue-à-bogue avec BSD. Cela n’est
pris en compte que par le module du protocole UDP et sera
supprimé dans le futur. Dans ce mode, les erreurs ICMP reçues
pour une socket UDP ne seront pas transmises aux programmes
utilisateurs. Linux 2.0 donnait aussi une compatibilité
bogue-à-bogue pour les sockets raw avec cette option, mais cela
a été éliminé dans Linux 2.2. Il vaut mieux corriger les
programmes utilisateur que de valider cet attribut.
SO_PASSCRED
Autorise ou interdit la réception des messages de contrôle
SCM_CREDENTIALS. Pour plus de détails, voir unix(7).
SO_PEERCRED
Renvoie les authentifications du processus connecté à l’autre
extrémité de la socket. N’est utile que pour les sockets
PF_UNIX. Voir unix(7). L’argument est une structure ucred.
Seulement valide avec getsockopt.
SO_BINDTODEVICE
Attacher cette socket à un périphérique donné, tel “eth0”, comme
indiqué dans le nom d’interface transmis. Si le nom est une
chaîne vide ou si la longueur d’option est nulle, l’attachement
de la socket au périphérique est supprimé. L’option transmise
est une chaîne terminée par un caractère nul, contenant le nom
de l’interface, la longueur maximale étant IFNAMSIZ. Si la
socket est attachée à une interface, seuls les paquets reçus sur
cette interface particulière sont traités par la socket.
Remarquez que cela ne fonctionne que pour certains types de
sockets, en particulier les sockets AF_INET. Ceci n’est pas
supporté pour les sockets packet (utilisez un bind(8) normal
dessus).
SO_DEBUG
Activer le débogage sur la socket. Seulement autorisé pour les
processus avec la capacité CAP_NET_ADMIN ou un UID effectif nul.
SO_REUSEADDR
Indique que les règles permettant la validation des adresses
fournies dans un appel bind(2) doivent autoriser la
réutilisation des adresses locales. Pour les sockets PF_INET
cela signifie que la socket peut s’attacher à n’importe quelle
adresse sauf s’il y a une attente active dessus. Lorsque la
socket en attente est attachée à INADDR_ANY avec un port
spécifique, il n’est pas possible de s’attacher à nouveau à ce
port quelque soit l’adresse locale.
SO_TYPE
Obtenir le type de socket, sous forme d’entier (comme
SOCK_STREAM). Ne peut qu’être lu avec getsockopt.
SO_ACCEPTCONN
Renvoie une valeur indiquant si la socket a été déclarée comme
acceptant les connexions à l’aide de listen(). La valeur 0
indique que la socket n’est pas en attente de connexions ; la
valeur 1 indique que la socket accepte les connexions. Peut
seulement être lu avec getsockopt.
SO_DONTROUTE
Ne pas émettre par l’intermédiaire d’une passerelle, n’envoyer
qu’aux hôtes directement connectés. Le même effet peut être
obtenu avec l’attribut MSG_DONTROUTE durant une opération
send(2) sur la socket. Il s’agir d’un attribut entier booléen.
SO_BROADCAST
Fixer ou lire l’attribut broadcast. Lorsqu’il est actif, une
socket datagramme reçoit les paquets envoyés à l’adresse
broadcast et peut envoyer des paquets à une adresse broadcast.
Cette option n’a aucun effet sur les sockets de type
SOCK_STREAM.
SO_SNDBUF
Fixer ou lire la taille maximale en octets du buffer d’émission.
La valeur par défaut est fixée par le sysctl wmem_default et la
valeur maximale autorisée est fixée par le sysctl wmem_max.
SO_RCVBUF
Fixer ou lire la taille maximale en octets du buffer de
réception. La valeur par défaut est fixée par le sysctl
rmem_default et la valeur maximale autorisée est fixée par le
sysctl rmem_max.
SO_LINGER
Fixer ou lire l’option SO_LINGER. L’argument est une structure
linger.
struct linger {
int l_onoff; /* actif */
int l_linger; /* délai maximal */
};
Lorsque ce paramètre est actif, un appel close(2) ou shutdown(2)
ne se terminera pas avant que tous les messages en attente pour
la socket aient été correctement émis ou que le délai soit
écoulé. Sinon, l’appel revient immédiatement et la fermeture est
effectuée à l’arrière-plan. Lorsque la socket est fermée lors
d’un exit(3), elle se vide toujours à l’arrière-plan.
SO_PRIORITY
Fixe la priorité définie par le protocole pour tous les paquets
envoyés sur la socket. Linux utiliser cette valeur pour trier
les files réseau : les paquets avec une priorité élevés peuvent
être traités d’abord, en fonction de la gestion des files sur le
périphérique. Pour ip(7), ceci fixe aussi le champ IP Type-Of-
Service pour les paquets sortants.
SO_ERROR
Lire et effacer l’erreur en attente sur la socket. Uniquement
valide pour getsockopt. Renvoie un entier.
SIGNAUX
Lorsqu’on écrit sur une socket orientée connexion qui a été fermée
(localement ou à l’autre extrémité) le signal SIGPIPE est envoyé au
processus écrivain, et EPIPE est renvoyé. Le signal n’est pas envoyé
lorsque l’appel d’écriture contenait l’attribut MSG_NOSIGNAL.
Lorsqu’on le demande avec l’option FIOSETOWN de fcntl ou l’option
SIOCSPGRP de ioctl, 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 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
Les sysctls réseau des sockets de base sont accessibles avec les
fichiers /proc/sys/net/core/* ou avec l’interface sysctl(2).
rmem_default
contient la taille en octets par défaut du buffer de réception.
rmem_max
contient la taille maximale en octets du buffer de réception
qu’un utilisateur peut réclamer avec l’option SO_RCVBUF de la
socket.
wmem_default
contient la taille en octets par défaut du buffer d’émission.
wmem_max
contient la taille maximale en octets du buffer d’émission qu’un
utilisateur peut réclamer avec l’option SO_SNDBUF de la socket.
message_cost et message_burst
configurent le filtrage par jeton utilisé pour limiter la charge
des message d’avertissement dus aux événements réseau
extérieurs.
netdev_max_backlog
Nombre maximal de paquets dans la file d’entrée globale.
optmem_max
Taille maximale par socket des données de service et des données
de contrôle utilisateur comme les iovecs.
IOCTLS
Ces ioctls sont accessibles en utilisant ioctl(2) :
error = ioctl(ip_socket, ioctl_type, &value_result);
SIOCGSTAMP
Renvoie une structure struct timeval avec l’horodatage de
réception du dernier paquet transmis à l’utilisateur. Ceci
permet des mesures précises de circulation sur le réseau. Voir
setitimer(2) pour le détail de la struct timeval.
SIOCSPGRP
Fixer le processus ou le groupe de processus auquel envoyer les
signaux SIGIO ou SIGURG lorsqu’une opération d’entrée-sortie
asynchrone s’est terminée ou si des données urgentes sont
disponibles. L’argument est un pointeur sur un pid_t. Si
l’argument est positif, on envoie le signal à ce processus. S’il
est négatif on l’envoie au groupe de processus dont
l’identifiant correspond à la valeur absolue de l’argument. Un
processus ne peut demande que l’émission vers lui-même ou son
propre groupe, à moins qu’il ait la capacité CAP_KILL ou un UID
effectif nul.
FIOASYNC
Changer l’attribut O_ASYNC pour activer ou désactiver le mode
d’entrée-sortie asynchrone sur la socket. Le mode d’entrées-
sorties asynchrones signifie que le signal SIGIO ou le signal
fixé avec F_SETSIG est envoyé quand un événement d’entrée-sortie
se produit.
L’argument est un attribut booléen entier.
SIOCGPGRP
Lire le processus ou le groupe de processus auquel les signaux
SIGIO ou SIGURG sont envoyés, ou zéro si aucun n’est configuré.
Fcntls valides :
FIOGETOWN
Comme l’ioctl SIOCGPGRP.
FIOSETOWN
Comme l’ioctl SIOCSPGRP.
NOTES
Linux suppose que la moitié du buffer d’émission/réception est utilisé
pour les structures internes du noyau. Ainsi les sysctls sont deux fois
plus grand que ce que l’on peut observer directement sur le câble.
BOGUES
Les options de socket CONFIG_FILTER SO_ATTACH_FILTER et
SO_DETACH_FILTER ne sont pas documentées. Pour les utiliser, il est
conseillé d’utiliser la bibliothèque libpcap.
VERSIONS
SO_BINDTODEVICE a été introduit dans Linux 2.0.30. SO_PASSCRED est une
nouveauté de Linux 2.2. Les sysctls sont nouveaux dans Linux 2.2.
SO_RCVTIMEO et SO_SNDTIMEO sont supportées depuis Linux 2.3.41.
Précédemment, les délais d’attente étaient fixés dans les protocoles et
ne pouvaient être ni lus ni modifiés.
AUTEURS
Cette page de manuel a été écrite par Andi Kleen.
VOIR AUSSI
socket(2), ip(7), setsockopt(2), getsockopt(2), packet(7), ddp(7)
TRADUCTION
Christophe Blaess, 2001-2003.
Alain Portal, 2005.