socket

SOCKET(7)                  Manuel du programmeur Linux                 SOCKET(7)



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 tels que AF_INET, AF_IPX et
       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_RXQ_OVFL (depuis Linux 2.6.33)
              Indique qu'un message auxiliaire (cmsg) sous la forme d'une valeur
              non-signée et codée sur 32 bits doit être jointe aux tampons de
              sockets (skbs), indiquant le nombre de paquets perdus par la
              socket entre les deux derniers paquets reçus.

       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 (depuis Linux 3.11)
              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'existe 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
       connect(2), 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.70 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 à
       <perkamon-fr@traduc.org>.

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



Linux                            8 juillet 2014                        SOCKET(7)