SOCKET(7) Manuel de l'administrateur Linux SOCKET(7)
NOM
socket(2,7,n) - Interface Linux des sockets.
SYNOPSIS
#include <sys/socket.h>
mysocket = socket(2,7,n)(int socket_family, int socket_type, int protocol);
DESCRIPTION
Cette page de manuel documente l'interface utilisateur de l'implmen-
tation Linux des sockets rseau. Les sockets compatibles BSD
reprsentent une interface uniforme entre le processus utilisateur et
les piles de protocoles rseau dans le noyau. Les modules des proto-
coles sont groups 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,7,n)(2) pour plus de dtails sur les familles et les types de sock-
ets.
FONCTIONS DE LA COUCHE SOCKET
Ces fonctions servent un processus utilisateur pour envoyer ou
recevoir des paquets et pour faire d'autres oprations sur les sock-
ets. Pour plus de dtails, voir leur pages de manuel respectives.
socket(2,7,n)(2) cre une socket(2,7,n), connect(2) connecte une socket(2,7,n) une
adresse de socket(2,7,n) distante, la fonction bind(2,n,1 builtins)(2) attache une socket(2,7,n)
une adresse locale(3,5,7), listen(1,2,7)(2) indique la socket(2,7,n) que de nouvelles
connexions doivent y tre accept(2,8)es, et accept(2,8)(2) fournit une nou-
velle socket(2,7,n) avec la nouvelle connexion entrante. socketpair(2) ren-
voie deux sockets anonymes connectes (seulement implment pour
quelques familles locales comme PF_UNIX)
send(2,n)(2), sendto(2), et sendmsg(2) envoient des donnes sur une socket(2,7,n),
et recv(2), recvfrom(2), recvmsg(2) reoivent des donnes depuis une
socket. poll(2) et select(2,7,2 select_tut)(2) attendent que des donnes arrivent ou
que l'mission soit possible. De plus, les oprations d'entres-
sorties standards comme write(1,2)(2), writev(2), sendfile(1,2)(2), read(2,n,1 builtins)(2), et
readv(2) peuvent servir crire ou lire des donnes.
getsockname(2) renvoie l'adresse locale(3,5,7) d'une socket(2,7,n) et getpeername(1,2)(2)
renvoie l'adresse de la socket(2,7,n) distante. getsockopt(2) et setsock-
opt(2) servent fixer ou lire des options du niveau socket(2,7,n) ou proto-
cole. ioctl(2) peut servir pour lire ou crire d'autres options.
close(2,7,n)(2) sert fermer une socket. shutdown(2,8)(2) ferme un sens de com-
munication d'une socket(2,7,n) full-duplex connecte.
Le positionnement, ou l'utilisation de pread(2) et pwrite(2) avec un
dcalage non-nul n'est pas possible sur les sockets
On peut faire des entres-sorties non-bloquante sur les sockets en
fixant l'attribut O_NONBLOCK sur le descripteur de la socket(2,7,n) avec
fcntl(2). Ensuite toutes les oprations qui devraient normalement
bloquer se terminent immdiatement avec l'erreur EAGAIN (l'opration
devra tre retente ultrieurement). connect(2) renverra l'erreur
EINPROGRESS. L'utilisateur peut alors attendre divers vnements
avec poll(2) ou select(2,7,2 select_tut)(2).
+-------------------------------------------------------------+
| vnement E/S |
+------------+---------+--------------------------------------+
|vnemt | Poll | Occurrence |
+------------+---------+--------------------------------------+
|Lecture | POLLIN | De nouvelles donnes sont |
| | | arrives. |
+------------+---------+--------------------------------------+
|Lecture | POLLIN | Une connexion est tablie (pour les |
| | | sockets orientes connexion) |
+------------+---------+--------------------------------------+
|Lecture | POLLHUP | Dconnexion du correspondant. |
+------------+---------+--------------------------------------+
|Lecture | POLLHUP | Connexion rompue (seulement pour les |
| | | protocoles orients connexion). Si |
| | | on crit sur la socket(2,7,n), le signal(2,7) |
| | | SIGPIPE est aussi mis. |
+------------+---------+--------------------------------------+
|criture | POLLOUT | La socket(2,7,n) a assez de place dans le |
| | | buffer d'mission pour crire de |
| | | nouvelles donnes. |
+------------+---------+--------------------------------------+
|Lect/crit. | POLLIN | Un connect(2) en attente est ter- |
| | POLLOUT | min. |
+------------+---------+--------------------------------------+
|Lect/crit. | POLLERR | Une erreur asynchrone s'est produite |
+------------+---------+--------------------------------------+
|Lect/crit. | POLLHUP | Le correspondant clos un sens de |
| | | communication |
+------------+---------+--------------------------------------+
|Exception | POLLPRI | Donnes urgentes arrives, le sig- |
| | | nal SIGURG est alors envoy. |
+------------+---------+--------------------------------------+
Une alternative l'utilisation de poll/select(2,7,2 select_tut) est de laisser le noyau
informer l'application propos des vnements par l'intermdiaire
d'un signal(2,7) SIGIO. Pour cela l'attribut FASYNC doit tre plac sur
le descripteur de la socket(2,7,n) via fcntl(2) et un gestionnaire de signal(2,7)
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(2,7,n) positionn sur SOL_SOCKET.
SO_KEEPALIVE
Valide l'mission de messages priodiques gardant la socket(2,7,n)
ouverte pour les sockets orientes connexion. Il s'agit d'un
attribut entier boolen.
SO_OOBINLINE
Si cette option est active, les donnes hors-bande sont
places directement dans le flux de donnes reues. Sinon
elles ne sont transmises que si l'attribut MSG_OOB est demand
durant la rception.
SO_RCVLOWAT et SO_SNDLOWAT
Indiquent le nombre minimal d'octets dans le buffer pour que la
couche socket(2,7,n) passe les donnes au protocole (SO_SNDLOWAT) ou
l'utilisateur en rception (SO_RCVLOWAT). Ces deux valeurs
ne sont pas modifiables sous Linux et la taille de leur argument
est toujours fixe un octet. getsockopt peut lire les
valeurs, mais setsockopt renverra toujours ENOPROTOOPT.
SO_RCVTIMEO et SO_SNDTIMEO
Indiquent le dlai maximal d'mission ou de rception avant
de renvoyer une erreur. Sous Linux ces valeurs sont fixes
dans les protocoles et ne peuvent tre ni lues ni modifies.
Leurs fonctionnalits peuvent tre mules l'aide(1,5) de
alarm(1,2)(2) ou setitimer(2).
SO_BSDCOMPAT
Valider une compatibilit bogue- -bogue avec BSD. Cela n'est
pris en compte que par le module du protocole UDP et sera sup-
prim dans le futur. Dans ce mode, les erreurs ICMP reues
pour une socket(2,7,n) UDP ne seront pas transmises aux programmes
utilisateurs. Linux 2.0 donnait aussi une compatibilit
bogue- -bogue pour les sockets raw(3x,7,8,3x cbreak) 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 rception des messages de contrle
SCM_CREDENTIALS. Pour plus de dtails, voir unix(7).
SO_PEERCRED
Renvoie les authentifications du processus connect l'autre
extrmit 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(2,7,n) un priphrique donn, tel "eth0",
comme indiqu dans le nom d'interface transmis. Si le nom est
une chane vide ou si la longueur d'option est nulle,
l'attachement de la socket(2,7,n) au priphrique est supprim.
L'option transmise est une chane termine par un caractre
nul, contenant le nom de l'interface, la longueur maximale
tant IFNAMSIZ. Si la socket(2,7,n) est attache une interface,
seuls les paquets reus sur cette interface particulire sont
traits 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(2,n,1 builtins)(8) normal dessus).
SO_DEBUG
Activer le dbogage sur la socket. Seulement autoris pour les
processus avec la capacit CAP_NET_ADMIN ou un UID effectif
nul.
SO_REUSEADDR
Indique que les rgles permettant la validation des adresses
fournies dans un appel bind(2,n,1 builtins)(2) doivent autoriser la rutilisa-
tion des adresses locales. Pour les sockets PF_INET cela signi-
fie que la socket(2,7,n) peut s'attacher n'importe quelle adresse
sauf s'il y a une attente active dessus. Lorsque la socket(2,7,n) en
attente est attache INADDR_ANY avec un port spcifique, il
n'est pas possible de s'attacher nouveau ce port quelque
soit l'adresse locale.
SO_TYPE
Obtenir le type de socket(2,7,n), sous forme d'entier (comme
SOCK_STREAM). Ne peut qu'tre lu avec getsockopt.
SO_ACCEPTCONN
Renvoie une valeur indiquant si la socket(2,7,n) a t dclare
comme acceptant les connexions l'aide(1,5) de listen(1,2,7)(). La valeur
0 indique que la socket(2,7,n) n'est pas en attente de connexions ; la
valeur 1 indique que la socket(2,7,n) accepte les connexions. Peut
eulement tre lu avec getsockopt.
SO_DONTROUTE
Ne pas mettre par l'intermdiaire d'une passerelle, n'envoyer
qu'aux htes directement connects. Le mme effet peut tre
obtenu avec l'attribut MSG_DONTROUTE durant une opration
send(2,n)(2) sur la socket. Il s'agir d'un attribut entier boolen.
SO_BROADCAST
Fixer ou lire l'attribut broadcast. Lorsqu'il est actif une
socket(2,7,n) datagramme reoit les paquets envoys 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'mis-
sion. La valeur par dfaut est fixe par le sysctl(2,5,8)
wmem_default et la valeur maximale autorise est fixe par le
sysctl(2,5,8) wmem_max.
SO_RCVBUF
Fixer ou lire la taille maximale en octets du buffer de rcep-
tion. La valeur par dfaut est fixe par le sysctl(2,5,8)
rmem_default et la valeur maximale autorise est fixe par le
sysctl(2,5,8) 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; /* dlai maximal */
};
Lorsque ce paramtre est actif, un appel close(2,7,n)(2) ou shut-
down(2) ne se terminera pas avant que tous les messages en
attente pour la socket(2,7,n) aient t correctement mise ou que le
dlai soit coul. Sinon, l'appel revient immdiatement et
la fermeture est effectue l'arrire-plan. Lorsque la
socket(2,7,n) est ferme lors d'un exit(3,n,1 builtins)(3), elle se vide toujours
l'arrire-plan.
SO_PRIORITY
Fixe la priorit dfinie par le protocole pour tous les
paquets envoys sur la socket. Linux utiliser cette valeur
pour trier les files rseau : les paquets avec une priorit
levs peuvent tre traits d'abord, en fonction de la ges-
tion des files sur le priphrique. Pour ip(7,8)(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(2,7,n) oriente connexion qui a t ferme
(localement ou l'autre extrmit) le signal(2,7) SIGPIPE est envoy au
processus crivain, et EPIPE est renvoy. Le signal(2,7) 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 SIOC-
SPGRP de ioctl, le signal(2,7) SIGIO est envoye quand un vnement
d'entre-sortie se produit. Il est possible d'utiliser poll(2) ou
select(2,7,2 select_tut)(2) dans le gestionnaire de signal(2,7) pour savoir sur quelle socket(2,7,n)
l'vnement s'est produit? Une alternative (sous Linux 2.2) est de
demander un signal(2,7) temps-rel avec le fnctl F_SETSIG. Le gestionnaire
du signal(2,7) temps-rel 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 diffrents processus accdant la
mme socket(2,7,n)), la condition ayant dclench le SIGIO peut avoir dis-
paru quand le processus ragit au signal. Si cela se produit le pro-
cessus doit attendre nouveau car Linux lui renverra le signal(2,7)
ultrieurement.
SYSCTLS
Les sysctls rseau des sockets de base sont accessibles avec les
fichiers /proc(5,n)/sys/net/core/* ou avec l'interface sysctl(2,5,8)(2).
rmem_default
contient la taille en octets par dfaut du buffer de rcep-
tion.
rmem_max
contient la taille maximale en octets du buffer de rception
qu'un utilisateur peut rclamer avec l'option SO_RCVBUF de la
socket.
wmem_default
contient la taille en octets par dfaut du buffer d'mission.
wmem_max
contient la taille maximale en octets du buffer d'mission
qu'un utilisateur peut rclamer 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 vnements rseau
extrieurs.
netdev_max_backlog
Nombre maximal de paquets dans la file(1,n) d'entre globale.
optmem_max
Taille maximale par socket(2,7,n) des donnes de service et des
donnes de contrle utilisateur comme les iovecs.
IOCTLS
Ces ioctls sont accessibles en utilisant ioctl(2):
error(8,n) = ioctl(ip_socket, ioctl_type, &value_result);
SIOCGSTAMP
Renvoie une structure struct timeval avec l'horodatage de
rception du dernier paquet transmis l'utilisateur. Ceci
permet des mesures prcises de circulation sur le rseau. Voir
setitimer(2) pour le dtail de la struct timeval.
SIOCSPGRP
Fixer le processus ou le groupe de processus auquel envoyer les
signaux SIGIO ou SIGURG lorsqu'une opration d'entre-sortie
asynchrone s'est termine ou si des donnes urgentes sont
disponibles. L'argument est un pointeur sur un pid_t. Si
l'argument est positif, on envoie le signal(2,7) ce processus.
S'il est ngatif 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-mme 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 dsactiver le mode
d'entre-sortie asynchrone sur la socket. Le mode d'entres-
sorties asynchrones signifie que le signal(2,7) SIGIO ou le signal(2,7)
fix avec F_SETSIG est envoy quand un vnement d'entre-
sortie se produit.
L'argument est un attribut boolen entier.
SIOCGPGRP
Lire le processus ou le groupe de processus auquel les signaux
SIGIO ou SIGURG sont envoys, ou zro si aucun n'est con-
figur.
Fcntls valides:
FIOGETOWN
Comme l'ioctl SIOCGPGRP.
FIOSETOWN
Comme l'ioctl SIOCSPGRP.
NOTES
Linux suppose que la moiti du buffer d'mission/rception 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
cble.
BOGUES
Les options de socket(2,7,n) CONFIG_FILTER SO_ATTACH_FILTER et SO_DETACH_FIL-
TER ne sont pas documentes. Pour les utiliser il est conseill
d'utiliser la bibliothque 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.
AUTEURS
Cette page de manuel a t crire par Andi Kleen.
VOIR AUSSI
socket(2,7,n)(2), ip(7,8)(7), setsockopt(2), getsockopt(2), packet(7), ddp(7)
TRADUCTION
Christophe Blaess, 2001-2003.
LDP 25 juillet 2003 SOCKET(7)