Provided by:
manpages-fr_3.32d0.2p4-1_all 
NOM
socket - Interface Linux aux sockets
SYNOPSIS
#include <sys/socket.h>
sockfd = socket(int famille_socket, int type_socket, int protocole);
DESCRIPTION
Cette page de manuel documente l'interface utilisateur de
l'implementation Linux des sockets reseau. Les sockets compatibles BSD
representent l'interface uniforme entre le processus utilisateur et les
piles de protocoles reseau dans le noyau. Les modules des protocoles
sont regroupes en familles de protocoles comme AF_INET, AF_IPX,
AF_PACKET et en types de sockets comme SOCK_STREAM ou SOCK_DGRAM.
Consultez socket(2) pour plus d'informations sur les familles et les
types de sockets.
Fonctions du niveau socket
Ces fonctions servent au processus utilisateur pour envoyer ou recevoir
des paquets et pour faire d'autres operations sur les sockets. Pour
plus de details, consultez leurs pages de manuel respectives.
socket(2) cree une socket, connect(2) connecte une socket a une adresse
de socket distante, la fonction bind(2) attache une socket a une
adresse locale, listen(2) indique a la socket que de nouvelles
connexions doivent etre acceptees, et accept(2) fournit une nouvelle
socket avec la nouvelle connexion entrante. socketpair(2) renvoie deux
sockets anonymes connectees (seulement implemente pour quelques
familles locales comme AF_UNIX).
send(2), sendto(2), et sendmsg(2) envoient des donnees sur une socket,
et recv(2), recvfrom(2) et recvmsg(2) recoivent les donnees envoyees
par une socket. poll(2) et select(2) attendent que des donnees arrivent
ou que l'emission soit possible. De plus, les operations
d'entree-sortie standard comme write(2), writev(2), sendfile(2),
read(2) et readv(2) peuvent etre utilisees pour la lecture et
l'ecriture des donnees.
getsockname(2) renvoie l'adresse de la socket locale et getpeername(2)
renvoie l'adresse de la socket distante. getsockopt(2) et setsockopt(2)
servent a definir et obtenir les options de la couche socket ou
protocole. ioctl(2) peut etre utilise pour lire et ecrire d'autres
options.
close(2) sert a fermer une socket. shutdown(2) ferme une partie des
connexions d'une socket multiple.
La recherche ou l'utilisation de pread(2) et pwrite(2) avec un decalage
non nul n'est pas possible sur les sockets.
Des operations d'entree-sortie non bloquantes sur les sockets sont
possibles en definissant l'attribut O_NONBLOCK du descripteur de la
socket avec fcntl(2). Toutes les operations qui devraient normalement
bloquer se terminent alors avec l'erreur EAGAIN (l'operation devra etre
retentee ulterieurement). connect(2) renverra l'erreur EINPROGRESS.
L'utilisateur peut alors attendre divers evenements avec poll(2) ou
select(2).
+---------------------------------------------------------------+
| Evenements E/S |
+-------------+---------+---------------------------------------+
|Evenement | Appel | Circonstance |
+-------------+---------+---------------------------------------+
|Lecture | POLLIN | Arrivee de nouvelles donnees |
+-------------+---------+---------------------------------------+
|Lecture | POLLIN | Configuration d'une connexion achevee |
| | | (pour les sockets orientees |
| | | connexion) |
+-------------+---------+---------------------------------------+
|Lecture | POLLHUP | Demande de deconnexion initiee par |
| | | l'autre extremite |
+-------------+---------+---------------------------------------+
|Lecture | POLLHUP | Connexion rompue (seulement pour les |
| | | protocoles orientes connexion) Lors |
| | | de l'ecriture sur la socket, le |
| | | signal SIGPIPE est aussi emis. |
+-------------+---------+---------------------------------------+
|Ecriture | POLLOUT | La socket a assez de place dans le |
| | | tampon d'emission pour ecrire de |
| | | nouvelles donnees. |
+-------------+---------+---------------------------------------+
|Lect./Ecrit. | POLLIN| | Un appel sortant a connect(2) est |
| | POLLOUT | termine. |
+-------------+---------+---------------------------------------+
|Lect./Ecrit. | POLLERR | Une erreur asynchrone s'est produite. |
+-------------+---------+---------------------------------------+
|Lect./Ecrit. | POLLHUP | Le correspondant a clos un sens de |
| | | communication. |
+-------------+---------+---------------------------------------+
|Exception | POLLPRI | Arrivee de donnees urgentes. SIGURG |
| | | est alors envoye. |
+-------------+---------+---------------------------------------+
Une alternative a poll(2) et select(2) est de laisser le noyau informer
l'application des evenements par l'intermediaire d'un signal SIGIO.
Pour cela, l'attribut O_ASYNC doit etre defini sur un descripteur de
fichier de la socket via fcntl(2) et un gestionnaire de signal valable
pour SIGIO doit etre installe avec sigaction(2). Consultez les
remarques sur les Signaux ci-dessous.
Options de sockets
Ces options communes a toutes les sockets peuvent etre definies en
utilisant setsockopt(2) et lues avec getsockopt(2) avec le niveau de
socket positionne a SOL_SOCKET.
SO_ACCEPTCONN
Renvoie une valeur indiquant si la socket a ete declaree comme
acceptant les connexions a l'aide de listen(2). La valeur 0
indique que la socket n'est pas en attente de connexions et la
valeur 1 indique que la socket accepte les connexions. Cette
option de socket peut etre seulement lue, et pas modifiee.
SO_BINDTODEVICE
Attache cette socket a un peripherique donne, tel que
<< eth0 >>, comme indique dans le nom d'interface transmis. Si
le nom est une chaine vide ou si la longueur de l'option est
nulle, la socket est detachee du peripherique. L'option
transmise est une chaine de longueur variable terminee par un
caractere nul, contenant le nom de l'interface, la longueur
maximale etant IFNAMSIZ. Si une socket est attachee a une
interface, seuls les paquets recus de cette interface
particuliere sont traites par la socket. Cela ne fonctionne que
pour certains types de sockets, en particulier les sockets
AF_INET. Ceci n'est pas gere pour les sockets de paquets
(utilisez pour cela bind(8)).
SO_BROADCAST
Definit ou lit l'attribut de diffusion. Lorsqu'il est active,
les sockets de datagrammes recoivent les paquets envoyes a
l'adresse de diffusion et peuvent envoyer des paquets a une
adresse de diffusion. Cette option n'a aucun effet sur les
sockets orientees flux.
SO_BSDCOMPAT
Active la compatibilite BSD bogue-a-bogue. Cela est utilise par
le module du protocole UDP de Linux 2.0 et 2.2. Si cette
compatibilite est activee, les erreurs ICMP recues pour une
socket UDP ne seront pas transmises au programme utilisateur.
Dans les versions recentes du noyau, la gestion de cette option
a ete abandonnee progressivement : Linux 2.4 l'ignore
silencieusement et Linux 2.6 genere une alerte noyau (printk())
si le programme utilise cette option. Linux 2.0 activait
egalement les options de compatibilite BSD bogue-a-bogue
(modification aleatoire des en-tetes, non prise en compte de
l'attribut de diffusion) pour les sockets brutes ayant cette
option, mais cela a ete elimine dans Linux 2.2.
SO_DEBUG
Active le debogage de socket. Cela n'est autorise que pour les
processus avec la capacite CAP_NET_ADMIN ou un identifiant
d'utilisateur effectif egal a 0.
SO_DOMAIN (depuis Linux 2.6.32)
Recupere le domaine de socket en tant qu'entier, en renvoyant
une valeur telle que AF_INET6. Consultez socket(2) pour plus de
details. Cette option de socket peut etre seulement lue, et pas
modifiee.
SO_ERROR
Lit et efface l'erreur en cours sur la socket. Cette option de
socket peut etre seulement lue, et pas modifiee. Demande un
entier.
SO_DONTROUTE
Ne pas emettre par l'intermediaire d'une passerelle, n'envoyer
qu'aux hotes directement connectes. Le meme effet peut etre
obtenu avec l'attribut MSG_DONTROUTE durant une operation
send(2) sur la socket. Demande un attribut entier booleen.
SO_KEEPALIVE
Active l'emission de messages periodiques gardant la socket
ouverte pour les sockets orientees connexion. Demande un
attribut entier booleen.
SO_LINGER
Definit ou lit l'option SO_LINGER. Le parametre est une
structure linger.
struct linger {
int l_onoff; /* definition de l'activite */
int l_linger; /* duree d'attente en secondes */
};
Lorsque ce parametre est actif, un appel a close(2) ou
shutdown(2) ne se terminera pas avant que tous les messages en
attente pour la socket aient ete correctement emis ou que le
delai d'attente soit ecoule. Sinon, l'appel se termine
immediatement et la fermeture est effectuee en arriere-plan.
Lorsque la socket est fermee au cours d'un exit(2), elle attend
toujours en arriere-plan.
SO_OOBINLINE
Si cette option est activee, les donnees hors bande sont placees
directement dans le flux des donnees recues. Sinon, elles ne
sont transmises que si l'attribut MSG_OOB est defini durant la
reception.
SO_PASSCRED
Autorise ou interdit la reception des messages de controle
SCM_CREDENTIALS. Pour plus de details, consultez unix(7).
SO_PEERCRED
Renvoie les donnees d'authentification du processus etranger
connecte a cette socket. Cela n'est possible que pour les
sockets de flux AF_UNIX connectees et les paires de sockets
AF_UNIX de flux et de datagrammes crees avec socketpair(2) ;
consultez unix(7). Les donnees retournees sont celles qui
etaient effectives au moment de l'appel a connect(2) ou
socketpair(2). L'argument est une structure ucred. Cette option
de socket peut etre seulement lue, et pas modifiee.
SO_PRIORITY
Fixe la priorite definie par le protocole pour tous les paquets
envoyes sur la socket. Linux utilise cette valeur pour trier les
files reseau : les paquets avec une priorite elevee peuvent etre
traites d'abord, en fonction de la gestion des files sur le
peripherique. Pour ip(7), ceci fixe aussi le champ IP
Type-Of-Service (TOS) pour les paquets sortants. Etablir une
priorite en dehors de l'intervalle allant de 0 a 6 necessite la
capacite CAP_NET_ADMIN.
SO_PROTOCOL (depuis Linux 2.6.32)
Recupere le protocole de socket en tant qu'entier, en renvoyant
une valeur telle que IPPROTO_SCTP. Consultez socket(2) pour
plus de details. Cette option de socket peut etre seulement lue,
et pas modifiee.
SO_RCVBUF
Definit ou lit la taille maximale en octets du tampon de
reception. Le noyau double cette valeur (pour prevoir de
l'espace pour les operations de service) lorsque la valeur est
definie avec setsockopt(2), et cette valeur doublee est
retournee par getsockopt(2). La valeur par defaut est definie
par le fichier /proc/sys/net/core/rmem_default et la valeur
maximale autorisee est fixee par le fichier
/proc/sys/net/core/rmem_max. La valeur (doublee) minimale pour
cette option est 256.
SO_RCVBUFFORCE (depuis Linux 2.6.14)
En utilisant cette option de socket, un processus privilegie
(CAP_NET_ADMIN) peut executer la meme tache que SO_RCVBUF, mais
la limite rmem_max peut etre remplacee.
SO_RCVLOWAT et SO_SNDLOWAT
Indique le nombre minimal d'octets dans le tampon pour que la
couche socket passe les donnees au protocole (SO_SNDLOWAT) ou a
l'utilisateur en reception (SO_RCVLOWAT). Ces deux valeurs sont
initialisees a 1. SO_SNDLOWAT n'est pas modifiable
(setsockopt(2) echoue avec l'erreur ENOPROTOOPT). SO_RCVLOWAT
est modifiable seulement depuis Linux 2.4. Les appels systeme
select(2) et poll(2) ne respectent pour le moment pas la
definition de SO_RCVLOWAT sur Linux, et marque la socket comme
lisible meme lorsqu'un unique octet de donnees est disponible.
La lecture suivante depuis la socket sera bloquee jusqu'a ce que
SO_RCVLOWAT octets soient disponibles.
SO_RCVTIMEO et SO_SNDTIMEO
Indique le delai maximal d'emission ou de reception avant de
signaler une erreur. Le parametre est une structure timeval. Si
une fonction d'entree ou de sortie bloque pendant cet intervalle
de temps et que des donnees ont ete envoyees ou recues, la
valeur de retour de cette fonction sera la quantite de donnees
transmises ; si aucune donnee n'a ete transmise et si le delai
d'attente est atteint, -1 est renvoye et errno est positionnee a
EAGAIN ou EWOULDBLOCK, comme si la socket avait ete definie
comme non bloquante. Si le delai d'attente est defini a zero
(valeur par defaut), l'operation ne sera jamais interrompue. Les
delais n'ont d'effet que pour les appels systeme faisant des E/S
sur des sockets (par exemple read(2), recvmsg(2), send(2),
sendmsg(2)) ; ils n'ont pas d'effet pour select(2), poll(2),
epoll_wait(2), etc.
SO_REUSEADDR
Indique que les regles utilisees pour la validation des adresses
fournies dans un appel a bind(2) doivent autoriser la
reutilisation des adresses locales. Pour les sockets AF_INET,
cela signifie que la socket peut etre attachee a n'importe
quelle adresse sauf lorsqu'une socket active en ecoute y est
liee. Lorsque la socket en ecoute est attachee a INADDR_ANY avec
un port specifique, il n'est pas possible de s'attacher a ce
port quelle que soit l'adresse locale. L'argument est un
attribut booleen entier.
SO_SNDBUF
Definit ou lit la taille maximale en octets du tampon
d'emission. Le noyau double cette valeur (pour prevoir de
l'espace pour les operations de service) lorsque la valeur est
definie avec setsockopt(2), et cette valeur doublee est
retournee par getsockopt(2). La valeur par defaut est definie
par le fichier /proc/sys/net/core/wmem_default et la valeur
maximale autorisee est fixee par le fichier
/proc/sys/net/core/wmem_max. La valeur (doublee) minimale pour
cette option est 2048.
SO_SNDBUFFORCE (depuis Linux 2.6.14)
En utilisant cette option de socket, un processus privilegie
(CAP_NET_ADMIN) peut executer la meme tache que SO_SNDBUF, mais
la limite wmem_max peut etre remplacee.
SO_TIMESTAMP
Active ou desactive la reception des messages de controle
SO_TIMESTAMP. Le message de controle d'horodatage est envoye
avec le niveau SOL_SOCKET et le champ cmsg_data est une
structure timeval indiquant la date de reception du dernier
paquet fourni a l'utilisateur dans cet appel. Consultez cmsg(3)
pour plus de details sur les messages de controle.
SO_TYPE
Lit le type de socket, sous forme d'entier (comme SOCK_STREAM).
Cette option de socket peut etre seulement lue, et pas modifiee.
Signaux
Lors de l'ecriture sur une socket orientee connexion qui a ete fermee
(localement ou a l'autre extremite), le signal SIGPIPE est envoye au
processus qui ecrivait, et EPIPE est renvoye. Le signal n'est pas
envoye lorsque l'appel d'ecriture indique contenait l'attribut
MSG_NOSIGNAL.
Lorsque demande avec l'option FIOSETOWN de fcntl(2) ou l'option
SIOCSPGRP de ioctl(2), le signal SIGIO est envoye quand un evenement
d'entree-sortie a lieu. Il est possible d'utiliser poll(2) ou select(2)
dans le gestionnaire de signal pour savoir sur quelle socket
l'evenement s'est produit. Une alternative (sous Linux 2.2) est de
definir un signal en temps-reel avec le fnctl(2) F_SETSIG. Le
gestionnaire du signal en temps-reel sera appele avec le descripteur de
fichier dans le champ si_fd de siginfo_t. Consultez fcntl(2) pour plus
d'informations.
Dans certains cas (par exemple, differents processus accedant a la meme
socket), la condition ayant declenche le signal SIGIO peut avoir deja
disparu quand le processus reagit au signal. Si cela se produit, le
processus devrait attendre a nouveau car Linux renverra ce signal
ulterieurement.
Interfaces /proc
Les parametres reseau de base des sockets sont accessibles en utilisant
les fichiers du repertoire /proc/sys/net/core/.
rmem_default
contient la taille en octets par defaut du tampon de reception.
rmem_max
contient la taille maximale en octets du tampon de reception
qu'un utilisateur peut definir avec l'option SO_RCVBUF de la
socket.
wmem_default
contient la taille en octets par defaut du tampon d'emission de
la socket.
wmem_max
contient la taille maximale en octets du tampon d'emission qu'un
utilisateur peut definir avec l'option SO_SNDBUF de la socket.
message_cost et message_burst
configurent le filtrage par jeton utilise pour limiter la charge
des messages d'avertissement dus aux evenements reseau
exterieurs.
netdev_max_backlog
contient le nombre maximal de paquets dans la file d'entree
globale.
optmem_max
contient la taille maximale par socket des donnees de service et
des donnees de controle utilisateur comme les iovecs.
Ioctls
Ces operations sont accessibles en utilisant ioctl(2) :
error = ioctl(ip_socket, type_ioctl, &valeur_r'esultat);
SIOCGSTAMP
Renvoie une structure timeval avec la date de reception du
dernier paquet transmis a l'utilisateur. Cela est utile pour des
mesures precises du temps de cheminement. Consultez setitimer(2)
pour une description de la structure timeval. L'ioctl ne doit
etre utilise que si l'option SO_TIMESTAMP de la socket n'est pas
definie. Sinon, la date du dernier paquet recu quand
SO_TIMESTAMP n'etait pas definie est renvoyee, provoquant un
echec s'il n'exite pas de tels paquets (c'est-a-dire que
ioctl(2) renvoie -1 avec un errno defini a ENOENT).
SIOCSPGRP
Definit le processus ou le groupe de processus a qui envoyer les
signaux SIGIO ou SIGURG lorsqu'une operation d'entree-sortie
asynchrone est terminee ou si des donnees urgentes sont
disponibles. L'argument est un pointeur sur un pid_t. Si
l'argument est positif, le signal est envoye a ce processus.
S'il est negatif, le signal est envoye au groupe de processus
dont l'identifiant correspond a la valeur absolue de l'argument.
Un processus ne peut demander que l'emission vers lui-meme ou
son propre groupe, a moins qu'il ait la capacite CAP_KILL ou un
identifiant d'utilisateur effectif nul.
FIOASYNC
Change l'attribut O_ASYNC pour activer ou desactiver le mode
d'entree-sortie asynchrone de la socket. Un mode d'entree-sortie
asynchrone signifie que le signal SIGIO ou le signal fixe avec
F_SETSIG est envoye quand un evenement d'entree-sortie se
produit.
Le parametre est un booleen entier. (Cette operation est
synonyme de l'utilisation de fcntl(2) pour definir l'attribut
O_ASYNC).
SIOCGPGRP
Lit le processus ou le groupe de processus auquel les signaux
SIGIO ou SIGURG sont envoyes. Zero est obtenu quand aucun n'est
defini.
Operations fcntl(2) valables :
FIOGETOWN
Identique a l'ioctl(2) SIOCGPGRP.
FIOSETOWN
Identique a l'ioctl(2) SIOCSPGRP.
VERSIONS
SO_BINDTODEVICE a ete introduit dans Linux 2.0.30. SO_PASSCRED est une
nouveaute de Linux 2.2. Les interfaces /proc ont ete introduites dans
Linux 2.2. SO_RCVTIMEO et SO_SNDTIMEO sont geres depuis Linux 2.3.41.
Auparavant, les delais d'attente etaient definis dans les protocoles et
ne pouvaient etre ni lus ni modifies.
NOTES
Linux suppose que la moitie du tampon d'emission/reception est utilise
pour les structures internes du noyau. Ainsi les valeurs dans les
fichiers /proc correspondants sont deux fois plus grandes que ce que
l'on peut observer directement sur le cable.
Linux ne permettra la reutilisation des ports qu'avec l'option
SO_REUSEADDR lorsque celle-ci sera definie a la fois par le precedent
programme qui a effectue un bind(2) sur le port et par le programme qui
veut reutiliser ce port. Ceci differe de certaines implementations (par
exemple, sur FreeBSD) ou seul le dernier programme doit definir
l'option SO_REUSEADDR. Habituellement, cette difference est invisible,
puisque, par exemple, un programme serveur est concu pour toujours
definir cette option.
BOGUES
Des options CONFIG_FILTER de socket, SO_ATTACH_FILTER et
SO_DETACH_FILTER, ne sont pas documentees. Pour les utiliser, il est
conseille d'utiliser la bibliotheque libpcap.
VOIR AUSSI
getsockopt(2), setsockopt(2), socket(2), capabilities(7), ddp(7),
ip(7), packet(7), tcp(7), udp(7), unix(7)
COLOPHON
Cette page fait partie de la publication 3.32 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.