Provided by: manpages-fr_1.67.0-1_all bug

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.