Provided by: manpages-fr_3.32d0.2p4-1_all bug

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'implémentation Linux des
       sockets réseau. Les sockets compatibles BSD représentent  l'interface  uniforme  entre  le
       processus  utilisateur  et  les  piles de protocoles réseau dans le noyau. Les modules des
       protocoles sont regroupés 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  opérations  sur  les sockets. Pour plus de détails, consultez 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 ê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 AF_UNIX).

       send(2), sendto(2), et sendmsg(2)  envoient  des  données  sur  une  socket,  et  recv(2),
       recvfrom(2)  et  recvmsg(2)  reçoivent  les  données  envoyées  par 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ée-sortie  standard  comme  write(2), writev(2), sendfile(2), read(2) et
       readv(2) peuvent être utilisées pour la lecture et l'écriture des données.

       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 à définir et obtenir les
       options de la couche socket ou protocole. ioctl(2) peut être utilisé pour lire  et  écrire
       d'autres options.

       close(2)  sert  à  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 décalage non nul n'est  pas
       possible sur les sockets.

       Des   opérations  d'entrée-sortie  non  bloquantes  sur  les  sockets  sont  possibles  en
       définissant l'attribut O_NONBLOCK du descripteur de la socket avec  fcntl(2).  Toutes  les
       opérations  qui  devraient  normalement  bloquer  se  terminent alors 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énements E/S                         │
       ├─────────────┬─────────┬───────────────────────────────────────┤
       │Événement    │ Appel   │ Circonstance                          │
       ├─────────────┼─────────┼───────────────────────────────────────┤
       │Lecture      │ POLLIN  │ Arrivée de nouvelles données          │
       ├─────────────┼─────────┼───────────────────────────────────────┤
       │Lecture      │ POLLIN  │ Configuration d'une connexion achevée │
       │             │         │ (pour     les    sockets    orientées │
       │             │         │ connexion)                            │
       ├─────────────┼─────────┼───────────────────────────────────────┤
       │Lecture      │ POLLHUP │ Demande de  déconnexion  initiée  par │
       │             │         │ l'autre extrémité                     │
       ├─────────────┼─────────┼───────────────────────────────────────┤
       │Lecture      │ POLLHUP │ Connexion  rompue (seulement pour les │
       │             │         │ protocoles orientés  connexion)  Lors │
       │             │         │ de   l'écriture  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| │ Un appel  sortant  à  connect(2)  est │
       │             │ POLLOUT │ terminé.                              │
       ├─────────────┼─────────┼───────────────────────────────────────┤
       │Lect./Écrit. │ POLLERR │ Une erreur asynchrone s'est produite. │
       ├─────────────┼─────────┼───────────────────────────────────────┤
       │Lect./Écrit. │ POLLHUP │ Le  correspondant  a  clos un sens de │
       │             │         │ communication.                        │
       ├─────────────┼─────────┼───────────────────────────────────────┤
       │Exception    │ POLLPRI │ Arrivée de données  urgentes.  SIGURG │
       │             │         │ est alors envoyé.                     │
       └─────────────┴─────────┴───────────────────────────────────────┘

       Une  alternative à poll(2) et select(2) est de laisser le noyau informer l'application des
       événements par l'intermédiaire d'un signal SIGIO. Pour cela, l'attribut O_ASYNC doit  être
       défini  sur  un  descripteur  de  fichier  de la socket via fcntl(2) et un gestionnaire de
       signal valable pour SIGIO doit être installé avec sigaction(2).  Consultez  les  remarques
       sur les Signaux ci-dessous.

   Options de sockets
       Ces options communes à toutes les sockets peuvent être définies en utilisant setsockopt(2)
       et lues avec getsockopt(2) avec le niveau de socket positionné à SOL_SOCKET.

       SO_ACCEPTCONN
              Renvoie une valeur indiquant si la  socket  a  été  déclarée  comme  acceptant  les
              connexions  à  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 être seulement lue, et pas modifiée.

       SO_BINDTODEVICE
              Attache  cette socket à un périphérique donné, tel que « eth0 », comme indiqué dans
              le nom d'interface transmis. Si le nom est une chaîne vide ou  si  la  longueur  de
              l'option  est nulle, la socket est détachée du périphérique. L'option transmise est
              une chaîne de longueur variable terminée par un caractère nul, contenant le nom  de
              l'interface,  la longueur maximale étant IFNAMSIZ. Si une socket est attachée à une
              interface, seuls les paquets reçus de cette interface particulière sont traités par
              la  socket.  Cela  ne fonctionne que pour certains types de sockets, en particulier
              les sockets AF_INET. Ceci n'est pas géré pour les sockets de paquets (utilisez pour
              cela bind(8)).

       SO_BROADCAST
              Définit  ou  lit  l'attribut  de  diffusion.  Lorsqu'il  est activé, les sockets de
              datagrammes reçoivent les paquets envoyés  à  l'adresse  de  diffusion  et  peuvent
              envoyer  des  paquets  à une adresse de diffusion. Cette option n'a aucun effet sur
              les sockets orientées flux.

       SO_BSDCOMPAT
              Active la compatibilité BSD bogue-à-bogue.  Cela  est  utilisé  par  le  module  du
              protocole  UDP de Linux 2.0 et 2.2. Si cette compatibilité est activée, les erreurs
              ICMP reçues pour une socket UDP ne seront pas transmises au programme  utilisateur.
              Dans  les  versions  récentes du noyau, la gestion de cette option a été abandonnée
              progressivement : Linux 2.4 l'ignore silencieusement et Linux 2.6 génère une alerte
              noyau (printk()) si le programme utilise cette option. Linux 2.0 activait également
              les  options  de  compatibilité  BSD  bogue-à-bogue  (modification  aléatoire   des
              en-têtes,  non  prise en compte de l'attribut de diffusion) pour les sockets brutes
              ayant cette option, mais cela a été éliminé dans Linux 2.2.

       SO_DEBUG
              Active le débogage de socket. Cela n'est autorisé que pour les  processus  avec  la
              capacité CAP_NET_ADMIN ou un identifiant d'utilisateur effectif égal à 0.

       SO_DOMAIN (depuis Linux 2.6.32)
              Récupère  le domaine de socket en tant qu'entier, en renvoyant une valeur telle que
              AF_INET6. Consultez socket(2)  pour plus de détails. Cette option  de  socket  peut
              être seulement lue, et pas modifiée.

       SO_ERROR
              Lit  et  efface  l'erreur  en cours sur la socket. Cette option de socket peut être
              seulement lue, et pas modifiée. Demande un entier.

       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. Demande un attribut entier booléen.

       SO_KEEPALIVE
              Active l'émission de messages  périodiques  gardant  la  socket  ouverte  pour  les
              sockets orientées connexion. Demande un attribut entier booléen.

       SO_LINGER
              Définit ou lit l'option SO_LINGER. Le paramètre est une structure linger.

                  struct linger {
                      int l_onoff;    /* définition de l'activité */
                      int l_linger;   /* durée d'attente en secondes */
                  };

              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 d'attente soit écoulé. Sinon, l'appel se termine immédiatement
              et la fermeture est effectuée en arrière-plan. Lorsque  la  socket  est  fermée  au
              cours d'un exit(2), elle attend toujours en arrière-plan.

       SO_OOBINLINE
              Si  cette  option est activée, les données hors bande sont placées directement dans
              le flux des données reçues. Sinon, elles  ne  sont  transmises  que  si  l'attribut
              MSG_OOB est défini durant la réception.

       SO_PASSCRED
              Autorise  ou  interdit  la réception des messages de contrôle SCM_CREDENTIALS. Pour
              plus de détails, consultez unix(7).

       SO_PEERCRED
              Renvoie les données d'authentification  du  processus  étranger  connecté  à  cette
              socket.  Cela n'est possible que pour les sockets de flux AF_UNIX connectées et les
              paires de sockets AF_UNIX de flux et  de  datagrammes  crées  avec  socketpair(2) ;
              consultez  unix(7).  Les  données  retournées sont celles qui étaient effectives au
              moment de l'appel à connect(2)  ou  socketpair(2).  L'argument  est  une  structure
              ucred. Cette option de socket peut être seulement lue, et pas modifiée.

       SO_PRIORITY
              Fixe  la  priorité  définie  par  le protocole pour tous les paquets envoyés sur la
              socket. Linux utilise cette valeur pour trier les files réseau : les  paquets  avec
              une  priorité  élevée  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
              (TOS)  pour  les  paquets  sortants. Établir une priorité en dehors de l'intervalle
              allant de 0 à 6 nécessite la capacité CAP_NET_ADMIN.

       SO_PROTOCOL (depuis Linux 2.6.32)
              Récupère le protocole de socket en tant qu'entier, en renvoyant  une  valeur  telle
              que IPPROTO_SCTP. Consultez socket(2)  pour plus de détails. Cette option de socket
              peut être seulement lue, et pas modifiée.

       SO_RCVBUF
              Définit ou lit la taille maximale en octets du tampon de réception. Le noyau double
              cette  valeur  (pour prévoir de l'espace pour les opérations de service) lorsque la
              valeur est définie avec setsockopt(2), et cette valeur doublée  est  retournée  par
              getsockopt(2).    La    valeur    par   défaut   est   définie   par   le   fichier
              /proc/sys/net/core/rmem_default et la valeur maximale autorisée est  fixée  par  le
              fichier /proc/sys/net/core/rmem_max. La valeur (doublée) minimale pour cette option
              est 256.

       SO_RCVBUFFORCE (depuis Linux 2.6.14)
              En utilisant cette option de socket, un processus privilégié  (CAP_NET_ADMIN)  peut
              exécuter la même tâche que SO_RCVBUF, mais la limite rmem_max peut être remplacée.

       SO_RCVLOWAT et SO_SNDLOWAT
              Indique  le  nombre minimal d'octets dans le tampon pour que la couche socket passe
              les  données  au  protocole  (SO_SNDLOWAT)  ou   à   l'utilisateur   en   réception
              (SO_RCVLOWAT).  Ces  deux  valeurs  sont  initialisées  à  1. SO_SNDLOWAT n'est pas
              modifiable  (setsockopt(2)  échoue  avec  l'erreur  ENOPROTOOPT).  SO_RCVLOWAT  est
              modifiable  seulement  depuis Linux 2.4. Les appels système select(2) et poll(2) ne
              respectent pour le moment pas la définition de SO_RCVLOWAT sur Linux, et marque  la
              socket  comme  lisible  même  lorsqu'un  unique octet de données est disponible. La
              lecture suivante depuis la socket sera bloquée jusqu'à  ce  que  SO_RCVLOWAT octets
              soient disponibles.

       SO_RCVTIMEO et SO_SNDTIMEO
              Indique  le  délai maximal d'émission ou de réception avant de signaler 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 que des données ont été envoyées ou
              reçues, la valeur  de  retour  de  cette  fonction  sera  la  quantité  de  données
              transmises ;  si  aucune  donnée  n'a  été  transmise  et si le délai d'attente est
              atteint, -1 est renvoyé et errno est positionnée à EAGAIN ou EWOULDBLOCK, comme  si
              la socket avait été définie comme non bloquante. Si le délai d'attente est défini à
              zéro (valeur par défaut), l'opération ne sera jamais interrompue. Les délais  n'ont
              d'effet  que  pour  les appels système 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 règles utilisées pour la validation des adresses fournies dans un
              appel à bind(2) doivent autoriser la réutilisation des adresses locales.  Pour  les
              sockets  AF_INET, cela signifie que la socket peut être attachée à n'importe quelle
              adresse sauf lorsqu'une socket active en écoute y est liée. Lorsque  la  socket  en
              écoute  est attachée à INADDR_ANY avec un port spécifique, il n'est pas possible de
              s'attacher à ce port quelle que soit l'adresse locale. L'argument est  un  attribut
              booléen entier.

       SO_SNDBUF
              Définit  ou  lit la taille maximale en octets du tampon d'émission. Le noyau double
              cette valeur (pour prévoir de l'espace pour les opérations de service)  lorsque  la
              valeur  est  définie  avec setsockopt(2), et cette valeur doublée est retournée par
              getsockopt(2).   La   valeur   par   défaut   est   définie    par    le    fichier
              /proc/sys/net/core/wmem_default  et  la  valeur maximale autorisée est fixée par le
              fichier /proc/sys/net/core/wmem_max. La valeur (doublée) minimale pour cette option
              est 2048.

       SO_SNDBUFFORCE (depuis Linux 2.6.14)
              En  utilisant  cette option de socket, un processus privilégié (CAP_NET_ADMIN) peut
              exécuter la même tâche que SO_SNDBUF, mais la limite wmem_max peut être remplacée.

       SO_TIMESTAMP
              Active ou désactive la réception des messages de contrôle SO_TIMESTAMP. Le  message
              de contrôle d'horodatage est envoyé avec le niveau SOL_SOCKET et le champ cmsg_data
              est une structure timeval indiquant la date de réception du dernier paquet fourni à
              l'utilisateur  dans  cet  appel.  Consultez  cmsg(3)  pour  plus de détails sur les
              messages de contrôle.

       SO_TYPE
              Lit le type de socket, sous forme d'entier (comme  SOCK_STREAM).  Cette  option  de
              socket peut être seulement lue, et pas modifiée.

   Signaux
       Lors  de  l'écriture  sur  une socket orientée connexion qui a été fermée (localement ou à
       l'autre extrémité), le signal SIGPIPE est envoyé au processus qui écrivait, et  EPIPE  est
       renvoyé.  Le  signal  n'est  pas  envoyé  lorsque  l'appel  d'écriture  indiqué  contenait
       l'attribut MSG_NOSIGNAL.

       Lorsque demandé avec l'option FIOSETOWN de fcntl(2) ou l'option SIOCSPGRP de ioctl(2),  le
       signal  SIGIO  est  envoyé  quand  un  événement  d'entrée-sortie  a lieu. 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 définir un
       signal en temps-réel avec le fnctl(2) F_SETSIG. Le gestionnaire du  signal  en  temps-réel
       sera  appelé  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, différents  processus  accédant  à  la  même  socket),  la
       condition  ayant  déclenché  le  signal  SIGIO  peut avoir déjà disparu quand le processus
       réagit au signal. Si cela se produit, le processus devrait attendre à  nouveau  car  Linux
       renverra ce signal ultérieurement.

   Interfaces /proc
       Les  paramètres  réseau  de base des sockets sont accessibles en utilisant les fichiers du
       répertoire /proc/sys/net/core/.

       rmem_default
              contient la taille en octets par défaut du tampon de réception.

       rmem_max
              contient la taille maximale en octets du tampon de réception qu'un utilisateur peut
              définir avec l'option SO_RCVBUF de la socket.

       wmem_default
              contient la taille en octets par défaut du tampon d'émission de la socket.

       wmem_max
              contient  la  taille maximale en octets du tampon d'émission qu'un utilisateur peut
              définir avec l'option SO_SNDBUF de la socket.

       message_cost et message_burst
              configurent le filtrage par jeton utilisé  pour  limiter  la  charge  des  messages
              d'avertissement dus aux événements réseau extérieurs.

       netdev_max_backlog
              contient le nombre maximal de paquets dans la file d'entrée globale.

       optmem_max
              contient  la  taille  maximale  par socket des données de service et des données de
              contrôle utilisateur comme les iovecs.

   Ioctls
       Ces opérations sont accessibles en utilisant ioctl(2) :

           error = ioctl(ip_socket, type_ioctl, &valeur_résultat);

       SIOCGSTAMP
              Renvoie une structure timeval avec la date de réception du dernier paquet  transmis
              à  l'utilisateur. Cela est utile pour des mesures précises du temps de cheminement.
              Consultez setitimer(2) pour une description de la  structure  timeval.  L'ioctl  ne
              doit  être  utilisé  que  si  l'option SO_TIMESTAMP de la socket n'est pas définie.
              Sinon, la date du dernier paquet reçu quand SO_TIMESTAMP n'était  pas  définie  est
              renvoyée,  provoquant  un  échec s'il n'exite pas de tels paquets (c'est-à-dire que
              ioctl(2) renvoie -1 avec un errno défini à ENOENT).

       SIOCSPGRP
              Définit le processus ou le groupe de processus à qui envoyer les signaux  SIGIO  ou
              SIGURG  lorsqu'une  opération  d'entrée-sortie  asynchrone  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, le signal est envoyé à ce processus. S'il est négatif, le
              signal est envoyé au groupe de processus dont l'identifiant correspond à la  valeur
              absolue  de  l'argument. Un processus ne peut demander que l'émission vers lui-même
              ou son propre groupe, à moins qu'il ait la  capacité  CAP_KILL  ou  un  identifiant
              d'utilisateur effectif nul.

       FIOASYNC
              Change  l'attribut  O_ASYNC  pour  activer  ou  désactiver  le mode d'entrée-sortie
              asynchrone de la socket. Un mode d'entrée-sortie asynchrone signifie que le  signal
              SIGIO ou le signal fixé avec F_SETSIG est envoyé quand un événement d'entrée-sortie
              se produit.

              Le paramètre est un booléen entier. (Cette opération est synonyme de  l'utilisation
              de fcntl(2) pour définir l'attribut O_ASYNC).

       SIOCGPGRP
              Lit  le processus ou le groupe de processus auquel les signaux SIGIO ou SIGURG sont
              envoyés. Zéro est obtenu quand aucun n'est défini.

       Opérations fcntl(2) valables :

       FIOGETOWN
              Identique à l'ioctl(2) SIOCGPGRP.

       FIOSETOWN
              Identique à l'ioctl(2) SIOCSPGRP.

VERSIONS

       SO_BINDTODEVICE a été introduit  dans  Linux 2.0.30.  SO_PASSCRED  est  une  nouveauté  de
       Linux 2.2.  Les  interfaces  /proc  ont  été  introduites  dans  Linux 2.2. SO_RCVTIMEO et
       SO_SNDTIMEO sont gérés depuis  Linux 2.3.41.  Auparavant,  les  délais  d'attente  étaient
       définis dans les protocoles et ne pouvaient être ni lus ni modifiés.

NOTES

       Linux suppose que la moitié du tampon d'émission/réception est utilisé 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 câble.

       Linux  ne  permettra  la  réutilisation  des  ports  qu'avec l'option SO_REUSEADDR lorsque
       celle-ci sera définie à la fois par le précédent programme qui a effectué un  bind(2)  sur
       le  port  et  par  le  programme  qui  veut  réutiliser ce port. Ceci diffère de certaines
       implémentations (par exemple, sur FreeBSD) où  seul  le  dernier  programme  doit  définir
       l'option  SO_REUSEADDR.  Habituellement,  cette  différence  est  invisible,  puisque, par
       exemple, un programme serveur est conçu pour toujours définir cette option.

BOGUES

       Des options CONFIG_FILTER de socket, SO_ATTACH_FILTER et  SO_DETACH_FILTER,  ne  sont  pas
       documentées. Pour les utiliser, il est conseillé d'utiliser la bibliothèque 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 être trouvées à
       l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis   2010,   cette   traduction   est   maintenue   à   l'aide   de    l'outil    po4a
       <URL:http://po4a.alioth.debian.org/>  par  l'équipe  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'équipe francophone de
       traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>   ou   par   un  rapport  de  bogue  sur  le  paquet
       manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document  en  utilisant  la
       commande « man -L C <section> <page_de_man> ».