Provided by: manpages-fr_3.57d1p1-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.

   Structures d'adresse de socket
       Chaque  domaine  de  socket a son propre format pour les adresses de socket, avec une structure d'adresse
       propre. Chacune  de  ces  structures  commence  avec  un  champ  entier  « family »  (famille),  de  type
       sa_family_t, qui indique le type de structure d'adresse. Cela permet aux appels système génériques à tous
       les  domaines  de sockets (par exemple connect(2), bind(2), accept(2), getsockname(2), getpeername(2)) de
       déterminer le domaine d'une adresse de socket donnée.

       Le type struct sockaddr est défini afin de pouvoir passer n'importe quel type  d'adresse  de  socket  aux
       interface  dans  l'API  des  sockets.  Le  but de ce type est purement d'autoriser la conversion de types
       d'adresse de socket propres à un domaine vers le type « générique », afin d'éviter les avertissements  du
       compilateur au sujet de la non correspondance dans les appels de l'API des sockets.

       De  plus,  l'API  des  sockets  fournit le type de données struct sockaddr_storage. Ce type est fait pour
       contenir toute structure d'adresse de socket spécifique à un domaine. Il est suffisamment  grand  et  est
       aligné correctement (en particulier, il est assez grand pour contenir des adresses de socket IPv6). Cette
       structure  contient  le  champ  suivant,  qui  peut être utilisé pour identifier le type d'adresse socket
       effectivement stockée dans la structure :

               sa_family_t ss_family;

       La structure sockaddr_storage est utile dans les programmes qui doivent prendre en charge les adresses de
       socket de manière générique (par exemple les programmes qui doivent gérer  à  la  fois  des  adresses  de
       socket IPv4 et IPv6).

   Options de sockets
       Les  options  présentées  ci-dessous  peuvent  être  définies  en  utilisant  setsockopt(2)  et lues avec
       getsockopt(2) avec le niveau de socket positionné à SOL_SOCKET, et  ce  pour  toutes  les  sockets.  Sauf
       mention contraire, optval est un pointeur vers un int.

       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.  Ce n'est pas géré pour les sockets paquet (utilisez pour cela
              bind(2)).

              Avant Linux 3.8, cette option de socket  pouvait  être  configurée,  sans  pouvoir  être  lue  par
              getsockopt(2).  Depuis Linux 3.8, elle est lisible. Le paramètre optlen doit contenir la taille du
              tampon destiné à recevoir le nom du périphérique, préférablement IFNAMSZ. La véritable longueur du
              nom du périphérique est renvoyée dans le paramètre optlen.

       SO_BROADCAST
              Définir ou lire l'attribut de  diffusion.  Une  fois  activé,  les  sockets  de  datagrammes  sont
              autorisées  à 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_MARK (depuis Linux 2.6.25)
              Positionner la marque pour chaque paquet envoyé au travers de cette socket (similaire à  la  cible
              MARK  de  netfilter,  mais  pour  les  sockets). Le changement de marque peut être utilisé pour un
              routage par marques sans netfilter ou pour le filtrage de paquets. Utiliser cette option nécessite
              la capacité CAP_NET_ADMIN.

       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_PEEK_OFF (depuis Linux 3.4)
              Cette  option,  qui n'est à ce jour garantie que pour les sockets unix(7), définit la valeur de la
              « position de lecture » (ou « peek offset ») pour l'appel système recv(2)  lorsqu'il  est  invoqué
              avec l'attribut MSG_PEEK.

              Lorsque  cette  option  reçoit  une valeur négative (elle est initialisée à -1 pour toute nouvelle
              socket), elle se comporte classiquement : recv(2),  avec  l'attribut  MSG_PEEK,  lit  les  données
              depuis le début de la file.

              Lorsque  l'option  reçoit  une  valeur  supérieure  ou égale à zéro, alors la lecture suivante des
              données accumulées dans la socket est réalisée à la position précisée par la valeur  de  l'option.
              Dans  le  même  temps,  la  « position de lecture » est incrémentée du nombre d'octets lus dans la
              file, de façon à ce que la prochaine lecture renvoie la donnée suivante dans la file.

              Si des données sont retirées de la tête de la file par la fonction recv(2)  (ou  équivalent)  sans
              l'attribut  MSG_PEEK,  alors la « position de lecture » est diminuée du nombre d'octets supprimés.
              Autrement dit, l'acquisition de données sans avoir recours à l'attribut MSG_PEEK a pour  effet  de
              modifier  la  « position  de  lecture », de sorte que la prochaine lecture renvoie les données qui
              auraient été renvoyées si aucune donnée n'avait été supprimée.

              Pour les sockets de datagrammes, si la « position de lecture » pointe à l'intérieur  d'un  paquet,
              alors les données renvoyées seront marquées de l'attribut MSG_TRUNC.

              L'exemple  suivant  illustre  l'usage  de  SO_PEEK_OFF. Imaginons une socket de flux contenant les
              données suivantes dans sa file :

                  aabbccddeeff

              La séquence suivante d'appels à recv(2) aura l'effet décrit dans les commentaires :

                  int ov = 4;                  // affecte 4 à la position de lecture
                  setsockopt(fd, SOL_SOCKET, SO_PEEK_OFF, &ov, sizeof(ov));

                  recv(fd, buf, 2, MSG_PEEK);  // Lit "cc"; l'indide de position prend la valeur 6
                  recv(fd, buf, 2, MSG_PEEK);  // Lit "dd"; l'indice de position prend la valeur 8
                  recv(fd, buf, 2, 0);         // Lit "aa"; l'indice de position prend la valeur 6
                  recv(fd, buf, 2, MSG_PEEK);  // Lit "ee"; l'indice position prend la valeur 8

       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.  Il  faut  définir la macro de test de fonctionnalité GNU_SOURCE pour activer la
              définition de cette structure dans <sys/socket.h>. Cette option de socket peut être seulement lue,
              et pas modifiée.

       SO_PRIORITY
              Définir 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),  cela
              définit 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 définie
              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
              Indiquer 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, ou EINPROGRESS (pour
              connect(2)), 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 définie
              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.

       SO_BUSY_POLL
              Définit  la  durée  approximative,  en  milliseconde,  d’attente  active de réception bloquante en
              absence de données. CAP_NET_ADMIN est nécessaire pour augmenter cette valeur. La valeur par défaut
              pour cette option est contrôlée par le fichier /proc/sys/net/core/busy_read.

              La valeur dans  le  fichier  /proc/sys/net/core/busy_poll  détermine  la  durée  pendant  laquelle
              select(2)  et  poll(2)  seront  en  attente  active  lors  d’une  opération  sur  des sockets avec
              SO_BUSY_POLL défini et qu’aucun événement à signaler n’est trouvé.

              Dans les deux cas, l’attente active ne sera réalisée que lorsque les dernières données reçues  par
              la socket proviennent d’un périphérique réseau qui ne prend pas en charge cette option.

              Bien  que  l’attente  active  peut  améliorer  la  latence de quelques applications, une attention
              particulière doit être portées à son utilisation puisque cela augmentera à la  fois  l’utilisation
              du processeur et la consommation puissance.

   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  défini  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), connect(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.57 du projet man-pages Linux. Une description du projet et des
       instructions     pour     signaler     des     anomalies    peuvent    être    trouvées    à    l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Christophe      Blaess      <http://www.blaess.fr/christophe/>      (1996-2003),       Alain       Portal
       <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> ».

Linux                                            20 janvier 2014                                       SOCKET(7)