.\" -*- coding: UTF-8 -*- '\" t .\" SPDX-License-Identifier: Linux-man-pages-1-para .\" .\" This man page is Copyright (C) 1999 Andi Kleen . .\" and copyright (c) 1999 Matthew Wilcox. .\" .\" 2002-10-30, Michael Kerrisk, .\" Added description of SO_ACCEPTCONN .\" 2004-05-20, aeb, added SO_RCVTIMEO/SO_SNDTIMEO text. .\" Modified, 27 May 2004, Michael Kerrisk .\" Added notes on capability requirements .\" A few small grammar fixes .\" 2010-06-13 Jan Engelhardt .\" Documented SO_DOMAIN and SO_PROTOCOL. .\" .\" FIXME .\" The following are not yet documented: .\" .\" SO_PEERNAME (2.4?) .\" get only .\" Seems to do something similar to getpeername(), but then .\" why is it necessary / how does it differ? .\" .\" SO_TIMESTAMPING (2.6.30) .\" Documentation/networking/timestamping.txt .\" commit cb9eff097831007afb30d64373f29d99825d0068 .\" Author: Patrick Ohly .\" .\" SO_WIFI_STATUS (3.3) .\" commit 6e3e939f3b1bf8534b32ad09ff199d88800835a0 .\" Author: Johannes Berg .\" Also: SCM_WIFI_STATUS .\" .\" SO_NOFCS (3.4) .\" commit 3bdc0eba0b8b47797f4a76e377dd8360f317450f .\" Author: Ben Greear .\" .\" SO_GET_FILTER (3.8) .\" commit a8fc92778080c845eaadc369a0ecf5699a03bef0 .\" Author: Pavel Emelyanov .\" .\" SO_MAX_PACING_RATE (3.13) .\" commit 62748f32d501f5d3712a7c372bbb92abc7c62bc7 .\" Author: Eric Dumazet .\" .\" SO_BPF_EXTENSIONS (3.14) .\" commit ea02f9411d9faa3553ed09ce0ec9f00ceae9885e .\" Author: Michal Sekletar .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH socket 7 "15 juillet 2023" "Pages du manuel de Linux 6.05.01" .SH NOM socket – Interface Linux aux sockets .SH SYNOPSIS .nf \fB#include \fP .PP \fIsockfd\fP\fB = socket(int \fP\fIfamille_socket\fP\fB, int \fP\fItype_socket\fP\fB, int \fP\fIprotocole\fP\fB);\fP .fi .SH 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 \fIfamilles de protocoles\fP tels que \fBAF_INET\fP, \fBAF_IPX\fP et \fBAF_PACKET\fP, et en \fItypes de sockets\fP comme \fBSOCK_STREAM\fP ou \fBSOCK_DGRAM\fP. Consultez \fBsocket\fP(2) pour plus d'informations sur les familles et les types de sockets. .SS "Fonctions du niveau socket" These functions are used by the user process to send or receive packets and to do other socket operations. For more information, see their respective manual pages. .PP \fBsocket\fP(2) crée un socket, \fBconnect\fP(2) connecte un socket à une adresse de socket distant, la fonction \fBbind\fP(2) attache un socket à une adresse locale, \fBlisten\fP(2) indique au socket que de nouvelles connexions doivent être acceptées et \fBaccept\fP(2) est utilisé pour obtenir un nouveau socket avec une nouvelle connexion entrante. \fBsocketpair\fP(2) renvoie deux sockets anonymes connectés (seulement implémentée pour quelques familles locales comme \fBAF_UNIX\fP). .PP \fBsend\fP(2), \fBsendto\fP(2) et \fBsendmsg\fP(2) envoient des données sur un socket, et \fBrecv\fP(2), \fBrecvfrom\fP(2) et \fBrecvmsg\fP(2) reçoivent les données d’un socket. \fBpoll\fP(2) et \fBselect\fP(2) attendent que des données arrivent ou que l'émission soit possible. De plus, les opérations d'entrée\-sortie standard comme \fBwrite\fP(2), \fBwritev\fP(2), \fBsendfile\fP(2), \fBread\fP(2) et \fBreadv\fP(2) peuvent être utilisées pour la lecture et l'écriture des données. .PP \fBgetsockname\fP(2) renvoie l'adresse du socket local et \fBgetpeername\fP(2) renvoie l'adresse du socket distant. \fBgetsockopt\fP(2) et \fBsetsockopt\fP(2) servent à définir et à obtenir les options de la couche socket ou du protocole. \fBioctl\fP(2) peut être utilisée pour lire et écrire d'autres options. .PP \fBclose\fP(2) sert à fermer un socket. \fBshutdown\fP(2) ferme une partie des connexions d'un duplex intégral de socket. .PP La recherche ou l'utilisation de \fBpread\fP(2) ou \fBpwrite\fP(2) avec une position différente de zéro n'est pas possible sur les sockets. .PP Des opérations d'entrée\-sortie non bloquantes sur les sockets sont possibles en définissant l'attribut \fBO_NONBLOCK\fP du descripteur de fichier du socket avec \fBfcntl\fP(2). Toutes les opérations qui devraient normalement bloquer se terminent alors avec l'erreur \fBEAGAIN\fP (l'opération devra être retentée ultérieurement). \fBconnect\fP(2) renverra l'erreur \fBEINPROGRESS\fP. L'utilisateur peut alors attendre divers événements avec \fBpoll\fP(2) ou \fBselect\fP(2). .TS tab(:) allbox; c s s l l lx. Événements E/S Évènement:Indicateur d’état:Occurrence Lecture:POLLIN:T{ Arrivée de nouvelles données. T} Lecture:POLLIN:T{ Une connexion a été réalisée (pour les sockets orientés connexion) T} Lecture:POLLHUP:T{ Une demande de déconnexion a été initiée par l'autre extrémité. T} Lecture:POLLHUP:T{ Une connexion est rompue (seulement pour les protocoles orientés connexion). Lorsque le socket est écrit, \fBSIGPIPE\fP est aussi envoyé. T} Écriture:POLLOUT:T{ Le socket a assez de place dans le tampon d'émission pour écrire de nouvelles données. T} Lect./Écrit.:T{ POLLIN | .br POLLOUT T}:T{ Un \fBconnect\fP(2) sortant a terminé. T} Lect./Écrit.:POLLERR:T{ Une erreur asynchrone s'est produite. T} Lect./Écrit.:POLLHUP:T{ Le correspondant a clos un sens de communication. T} Exception:POLLPRI:T{ Arrivée de données urgentes. \fBSIGURG\fP est alors envoyé. T} .\" FIXME . The following is not true currently: .\" It is no I/O event when the connection .\" is broken from the local end using .\" .BR shutdown (2) .\" or .\" .BR close (2). .TE .PP Une alternative à \fBpoll\fP(2) et \fBselect\fP(2) est de laisser le noyau informer l'application des événements par l'intermédiaire d'un signal \fBSIGIO\fP. Pour cela, l'attribut \fBO_ASYNC\fP doit être défini sur un descripteur de fichier du socket à l’aide de \fBfcntl\fP(2) et un gestionnaire de signal valable pour \fBSIGIO\fP doit être installé avec \fBsigaction\fP(2). Consultez les remarques sur les \fISignaux\fP ci\-dessous. .SS "Structures d'adresses 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 par un champ d’entier «\ family\ » (famille), de type \fIsa_family_t\fP, qui indique le type de structure d'adresse. Cela permet aux appels système génériques à tous les domaines de socket (par exemple \fBconnect\fP(2), \fBbind\fP(2), \fBaccept\fP(2), \fBgetsockname\fP(2), \fBgetpeername\fP(2)) de déterminer le domaine d'une adresse de socket donnée. .PP Le type \fIstruct sockaddr\fP est défini afin de pouvoir passer n'importe quel type d'adresse de socket aux interfaces 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 de type dans les appels de l'API des sockets. .PP De plus, l'API des sockets fournit le type de données \fIstruct sockaddr_storage\fP. 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 de socket effectivement stockée dans la structure\ : .PP .in +4n .EX sa_family_t ss_family; .EE .in .PP La structure \fIsockaddr_storage\fP 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). .SS "Options de socket" .\" FIXME . .\" In the list below, the text used to describe argument types .\" for each socket option should be more consistent .\" .\" SO_ACCEPTCONN is in POSIX.1-2001, and its origin is explained in .\" W R Stevens, UNPv1 Les options de socket présentées ci\-dessous peuvent être définies en utilisant \fBsetsockopt\fP(2) et lues avec \fBgetsockopt\fP(2) avec le niveau de socket positionné à \fBSOL_SOCKET\fP pour tous les sockets. Sauf mention contraire, \fIoptval\fP est un pointeur vers un \fIint\fP. .TP \fBSO_ACCEPTCONN\fP Renvoyer une valeur indiquant si le socket a été déclaré comme acceptant ou non les connexions à l'aide de \fBlisten\fP(2). La valeur\ \fB0\fP indique que le socket n'est pas à l’écoute et la valeur\ \fB1\fP indique que le socket l’est. Cette option de socket peut être seulement lue. .TP \fBSO_ATTACH_FILTER\fP (depuis Linux 2.2), \fBSO_ATTACH_BPF\fP (depuis Linux 3.19) Attacher un programme BPF classique (\fBSO_ATTACH_FILTER\fP) ou un programme BPF étendu (\fBSO_ATTACH_BPF\fP) au socket pour une utilisation comme filtre dans les paquets entrants. Un paquet sera abandonné si le programme de filtrage renvoie zéro. Si le programme de filtrage renvoie une valeur différente de zéro qui est moindre que la taille des données du paquet, celui\-ci sera tronqué à la taille renvoyée. Si la valeur renvoyée par le filtre est supérieure ou égale à la taille des données du paquet, le paquet est autorisé à continuer non modifié. .IP L’argument pour \fBSO_ATTACH_FILTER\fP est une structure \fIsock_fprog\fP, définie dans \fI\fP\ : .IP .in +4n .EX struct sock_fprog { unsigned short len; struct sock_filter *filter; }; .EE .in .IP L’argument pour \fBSO_ATTACH_BPF\fP est un descripteur de fichier renvoyé par l’appel système \fBbpf\fP(2) et doit référer à un programme de type \fBBPF_PROG_TYPE_SOCKET_FILTER\fP. .IP Ces options peuvent être définies plusieurs fois pour un socket donné, remplaçant à chaque fois le programme de filtre précédent. Les versions classiques et étendues peuvent être appelées sur le même socket, mais le filtre précédent sera toujours remplacé de telle façon qu’un socket n’aura jamais plus d’un filtre défini. .IP Les versions BPF classique et étendue sont expliquées dans le fichier source du noyau, \fIDocumentation/networking/filter.txt\fP .TP \fBSO_ATTACH_REUSEPORT_CBPF\fP, \fBSO_ATTACH_REUSEPORT_EBPF\fP Pour une utilisation avec l’option \fBSO_REUSEPORT\fP, ces options permettent à l’utilisateur de définir un programme BPF classique (\fBSO_ATTACH_REUSEPORT_CBPF\fP) ou étendu (\fBSO_ATTACH_REUSEPORT_EBPF\fP) qui précise comment les paquets sont assignés aux sockets dans le groupe de réutilisation de port (c’est\-à\-dire tous les sockets qui ont \fBSO_REUSEPORT\fP activé et qui utilisent la même adresse locale pour recevoir des paquets). .IP Le programme BPF doit renvoyer un indice entre\ 0 et N\-1 représentant le socket qui doit recevoir le paquet (où N est le nombre de sockets dans le groupe). Si le programme BPF renvoie un indice non valable, la sélection du socket reviendra au mécanisme strict \fBSO_REUSEPORT\fP. .IP Les sockets sont numérotés dans l’ordre dont ils sont ajoutés dans le groupe (c’est\-à\-dire l’ordre des appels \fBbind\fP(2) pour les sockets UDP ou l’ordre des appels \fBlisten\fP(2) pour les sockets TCP). Les nouveaux sockets ajoutés à un groupe de réutilisation de port hériteront du programme BPF. Quand un socket est supprimé d’un groupe de réutilisation (à l’aide de \fBclose\fP(2)), le dernier socket sera déplacé dans la position du socket fermé. .IP Ces options peuvent être définies à plusieurs reprises n’importe quand sur n’importe quel socket dans le groupe pour remplacer le programme BPF en cours utilisé par tous les sockets du groupe. .IP \fBSO_ATTACH_REUSEPORT_CBPF\fP prend le même type d’argument que \fBSO_ATTACH_FILTER\fP et \fBSO_ATTACH_REUSEPORT_EBPF\fP prend le même argument type que \fBSO_ATTACH_BPF\fP. .IP La prise en charge d’UDP pour cette fonctionnalité est disponible depuis Linux\ 4.5. La prise en charge de TCP est disponible depuis Linux\ 4.6. .TP \fBSO_BINDTODEVICE\fP Bind this socket to a particular device like \[lq]eth0\[rq], as specified in the passed interface name. If the name is an empty string or the option length is zero, the socket device binding is removed. The passed option is a variable\-length null\-terminated interface name string with the maximum size of \fBIFNAMSIZ\fP. If a socket is bound to an interface, only packets received from that particular interface are processed by the socket. Note that this works only for some socket types, particularly \fBAF_INET\fP sockets. It is not supported for packet sockets (use normal \fBbind\fP(2) there). .IP Avant Linux\ 3.8, cette option de socket pouvait être configurée, sans pouvoir être lue par \fBgetsockopt\fP(2). Depuis Linux\ 3.8, elle est lisible. Le paramètre \fIoptlen\fP doit contenir la taille du tampon destiné à recevoir le nom du périphérique et il est recommandé d'être de \fBIFNAMSZ\fP octets. La véritable longueur du nom du périphérique est renvoyée dans le paramètre \fIoptlen\fP. .TP \fBSO_BROADCAST\fP Définir ou lire l'attribut de diffusion. Une fois activé, les sockets de datagrammes sont autorisés à envoyer des paquets à une adresse de diffusion. Cette option n'a aucun effet sur les sockets orientés flux. .TP \fBSO_BSDCOMPAT\fP Activer 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 un 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 bruts ayant cette option, mais cela a été éliminé dans Linux\ 2.2. .TP \fBSO_DEBUG\fP Activer le débogage de socket. Cela n'est autorisé que pour les processus ayant la capacité \fBCAP_NET_ADMIN\fP ou un identifiant d'utilisateur effectif égal à\ 0. .TP \fBSO_DETACH_FILTER\fP (depuis Linux 2.2), \fBSO_DETACH_BPF\fP (depuis Linux 3.19) Ces deux options, qui sont synonymes, peuvent être utilisées pour retirer le programme BPF classique ou étendu attaché à un socket avec soit \fBSO_ATTACH_FILTER\fP soit \fBSO_ATTACH_BPF\fP. La valeur d’option est ignorée. .TP \fBSO_DOMAIN\fP (depuis Linux 2.6.32) Récupérer le domaine de socket sous forme d’entier, en renvoyant une valeur telle que \fBAF_INET6\fP. Consultez \fBsocket\fP(2) pour plus de détails. Cette option de socket peut être seulement lue. .TP \fBSO_ERROR\fP Lire et effacer l'erreur en cours sur le socket. Cette option de socket peut être seulement lue. Un entier est attendu. .TP \fBSO_DONTROUTE\fP 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 \fBMSG_DONTROUTE\fP durant une opération \fBsend\fP(2) sur le socket. Un attribut entier booléen est attendu. .TP \fBSO_INCOMING_CPU\fP (récupérable depuis Linux 3.19, modifiable depuis Linux 4.4) .\" getsockopt 2c8c56e15df3d4c2af3d656e44feb18789f75837 .\" setsockopt 70da268b569d32a9fddeea85dc18043de9d89f89 Définir ou obtenir l’affinité CPU d’un socket. Un attribut entier est attendu. .IP .in +4n .EX int cpu = 1; setsockopt(fd, SOL_SOCKET, SO_INCOMING_CPU, &cpu, sizeof(cpu)); .EE .in .IP .\" .\" From an email conversation with Eric Dumazet: .\" >> Note that setting the option is not supported if SO_REUSEPORT is used. .\" > .\" > Please define "not supported". Does this yield an API diagnostic? .\" > If so, what is it? .\" > .\" >> Socket will be selected from an array, either by a hash or BPF program .\" >> that has no access to this information. .\" > .\" > Sorry -- I'm lost here. How does this comment relate to the proposed .\" > man page text above? .\" .\" Simply that : .\" .\" If an application uses both SO_INCOMING_CPU and SO_REUSEPORT, then .\" SO_REUSEPORT logic, selecting the socket to receive the packet, ignores .\" SO_INCOMING_CPU setting. Parce que tous les paquets d’un flux unique (c’est\-à\-dire tous les paquets pour le même 4\-tuple) arrivent sur une file d’attente RX unique qui est associée avec un CPU particulier, le cas d’utilisation classique est d’employer un processus d’écoute par file RX, avec le flux entrant géré par un écouteur sur le même CPU gérant la file RX. Cela fournit un comportement NUMA optimal et conserve les caches de CPU prêts. .TP \fBSO_INCOMING_NAPI_ID\fP (récupérable depuis Linux 4.12) .\" getsockopt 6d4339028b350efbf87c61e6d9e113e5373545c9 Renvoyer un ID unique au niveau système, appelé ID\ NAPI qui est associé avec une file RX dans laquelle le dernier paquet associé à ce socket est reçu. .IP This can be used by an application to split the incoming flows among worker threads based on the RX queue on which the packets associated with the flows are received. It allows each worker thread to be associated with a NIC HW receive queue and service all the connection requests received on that RX queue. This mapping between an app thread and a HW NIC queue streamlines the flow of data from the NIC to the application. .TP \fBSO_KEEPALIVE\fP Activer l'émission de messages périodiques gardant le socket ouvert pour les sockets orientés connexion. Un attribut entier booléen est attendu. .TP \fBSO_LINGER\fP Définir ou lire l'option \fBSO_LINGER\fP. L’argument est une structure \fIlinger\fP. .IP .in +4n .EX struct linger { int l_onoff; /* attente activée */ int l_linger; /* durée d'attente en secondes */ }; .EE .in .IP Lorsque ce paramètre est actif, un appel à \fBclose\fP(2) ou \fBshutdown\fP(2) ne se terminera pas avant que tous les messages en attente pour le 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 le socket est fermé au cours d'un \fBexit\fP(2), il attend toujours en arrière\-plan. .TP \fBSO_LOCK_FILTER\fP .\" commit d59577b6ffd313d0ab3be39cb1ab47e29bdc9182 Lorsqu'elle est établie cette option empêchera la modification des filtres associés au socket. Ces filtres incluent tous les ensembles issus des options de socket \fBSO_ATTACH_FILTER\fP, \fBSO_ATTACH_BPF\fP, \fBSO_ATTACH_REUSEPORT_CBPF\fP et \fBSO_ATTACH_REUSEPORT_EBPF\fP. .IP Le cas d’utilisation typique est celui d’un processus privilégié pour définir un socket brut (une opération nécessitant la capacité \fBCAP_NET_RAW\fP), appliquer un filtre restrictif, régler l’option \fBSO_LOCK_FILTER\fP et alors soit abandonner ses privilèges soit passer le descripteur de fichier du socket à un processus non privilégié à l’aide d’un socket de domaine UNIX. .IP Une fois que l’option \fBSO_LOCK_FILTER\fP a été activée, essayer de modifier ou de supprimer le filtre attaché à un socket, ou désactiver l’option \fBSO_LOCK_FILTER\fP échouera avec l’erreur \fBEPERM\fP. .TP \fBSO_MARK\fP (depuis Linux 2.6.25) .\" commit 4a19ec5800fc3bb64e2d87c4d9fdd9e636086fe0 .\" and 914a9ab386a288d0f22252fc268ecbc048cdcbd5 Positionner la marque pour chaque paquet envoyé au travers de ce 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é \fBCAP_NET_ADMIN\fP. .TP \fBSO_OOBINLINE\fP .\" don't document it because it can do too much harm. .\".B SO_NO_CHECK .\" The kernel has support for the SO_NO_CHECK socket .\" option (boolean: 0 == default, calculate checksum on xmit, .\" 1 == do not calculate checksum on xmit). .\" Additional note from Andi Kleen on SO_NO_CHECK (2010-08-30) .\" On Linux UDP checksums are essentially free and there's no reason .\" to turn them off and it would disable another safety line. .\" That is why I didn't document the option. 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 \fBMSG_OOB\fP est défini durant la réception. .TP \fBSO_PASSCRED\fP Enable or disable the receiving of the \fBSCM_CREDENTIALS\fP control message. For more information, see \fBunix\fP(7). .TP \fBSO_PASSSEC\fP Enable or disable the receiving of the \fBSCM_SECURITY\fP control message. For more information, see \fBunix\fP(7). .TP \fBSO_PEEK_OFF\fP (depuis Linux 3.4) .\" commit ef64a54f6e558155b4f149bb10666b9e914b6c54 Cette option, qui n'est à ce jour prise en charge que pour les sockets \fBunix\fP(7), définit la valeur de la première «\ position de lecture\ » («\ peek offset\ ») pour l'appel système \fBrecv\fP(2) lorsqu'il est invoqué avec l'attribut \fBMSG_PEEK\fP. .IP Lorsque cette option reçoit une valeur négative (elle est initialisée à \fB\-1\fP pour tout nouveau socket), elle se comporte classiquement\ : \fBrecv\fP(2), avec l'attribut \fBMSG_PEEK\fP, lit les données au début de la file. .IP Lorsque l'option reçoit une valeur supérieure ou égale à zéro, alors la lecture suivante des données en file d’attente dans le 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. .IP Si des données sont retirées de la tête de la file par la fonction \fBrecv\fP(2) (ou équivalent) sans l'attribut \fBMSG_PEEK\fP, 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 \fBMSG_PEEK\fP 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. .IP 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 avec l'attribut \fBMSG_TRUNC\fP. .IP L'exemple suivant illustre l'usage de \fBSO_PEEK_OFF\fP. Imaginons un socket de flux contenant les données suivantes dans sa file\ : .IP .in +4n .EX aabbccddeeff .EE .in .IP La séquence suivante d'appels à \fBrecv\fP(2) aura l'effet décrit dans les commentaires\ : .IP .in +4n .EX int ov = 4; // Set peek offset to 4 setsockopt(fd, SOL_SOCKET, SO_PEEK_OFF, &ov, sizeof(ov)); \& recv(fd, buf, 2, MSG_PEEK); // Peeks "cc"; offset set to 6 recv(fd, buf, 2, MSG_PEEK); // Peeks "dd"; offset set to 8 recv(fd, buf, 2, 0); // Reads "aa"; offset set to 6 recv(fd, buf, 2, MSG_PEEK); // Peeks "ee"; offset set to 8 .EE .in .TP \fBSO_PEERCRED\fP Renvoyer les accréditations du processus pair connecté à ce socket. Pour plus de détails, consultez \fBunix\fP(7). .TP \fBSO_PEERSEC\fP (depuis Linux 2.6.2) Renvoyer le contexte de sécurité du socket pair connecté à ce socket. Pour plus de détails, consultez \fBunix\fP(7) et \fBip\fP(7). .TP \fBSO_PRIORITY\fP .\" For .\" .BR ip (7), .\" this also sets the IP type-of-service (TOS) field for outgoing packets. Définir la priorité définie par le protocole pour tous les paquets envoyés sur ce 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 sélectionné. Établir une priorité en dehors de l'intervalle allant de\ 0 à\ 6 nécessite la capacité \fBCAP_NET_ADMIN\fP. .TP \fBSO_PROTOCOL\fP (depuis Linux 2.6.32) Récupérer le protocole de socket sous forme d’entier, en renvoyant une valeur telle que \fBIPPROTO_SCTP\fP. Consultez \fBsocket\fP(2) pour plus de détails. Cette option de socket peut être seulement lue et pas modifiée. .TP \fBSO_RCVBUF\fP .\" Most (all?) other implementations do not do this -- MTK, Dec 05 .\" The following thread on LMKL is quite informative: .\" getsockopt/setsockopt with SO_RCVBUF and SO_SNDBUF "non-standard" behavior .\" 17 July 2012 .\" http://thread.gmane.org/gmane.linux.kernel/1328935 Définir ou lire 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 \fBsetsockopt\fP(2) et cette valeur doublée est retournée par \fBgetsockopt\fP(2). La valeur par défaut est définie par le fichier \fI/proc/sys/net/core/rmem_default\fP et la valeur maximale autorisée est définie par le fichier \fI/proc/sys/net/core/rmem_max\fP. La valeur (doublée) minimale pour cette option est 256. .TP \fBSO_RCVBUFFORCE\fP (depuis Linux 2.6.14) En utilisant cette option de socket, un processus privilégié (\fBCAP_NET_ADMIN\fP) peut exécuter la même tâche que \fBSO_RCVBUF\fP, mais la limite \fIrmem_max\fP peut être remplacée. .TP \fBSO_RCVLOWAT\fP et \fBSO_SNDLOWAT\fP Indiquer le nombre minimal d'octets dans le tampon pour que la couche socket passe les données au protocole (\fBSO_SNDLOWAT\fP) ou à l'utilisateur en réception (\fBSO_RCVLOWAT\fP). Ces deux valeurs sont initialisées à\ \fB1\fP. \fBSO_SNDLOWAT\fP n'est pas modifiable sur Linux (\fBsetsockopt\fP(2) échoue avec l'erreur \fBENOPROTOOPT\fP). \fBSO_RCVLOWAT\fP est modifiable seulement depuis Linux\ 2.4. .IP .\" Tested on kernel 2.6.14 -- mtk, 30 Nov 05 .\" commit c7004482e8dcb7c3c72666395cfa98a216a4fb70 Avant Linux\ 2.6.28, \fBselect\fP(2), \fBpoll\fP(2) et \fBepoll\fP(7) ne respectaient pas le réglage \fBSO_RCVLOWAT\fP sur Linux et indiquaient un socket comme lisible même si un seul octet était disponible. Une prochaine lecture du socket bloquerait alors jusqu’à ce que \fBSO_RCVLOWAT\fP octets soient disponibles. Depuis Linux\ 2.6.28, \fBselect\fP(2), \fBpoll\fP(2) et \fBepoll\fP(7) indiquent qu’un socket est lisible uniquement si au moins \fBSO_RCVLOWAT\fP octets sont disponibles. .TP \fBSO_RCVTIMEO\fP et \fBSO_SNDTIMEO\fP .\" Not implemented in Linux 2.0. .\" Implemented in Linux 2.1.11 for getsockopt: always return a zero struct. .\" Implemented in Linux 2.3.41 for setsockopt, and actually used. .\" in fact to EAGAIN Specify the receiving or sending timeouts until reporting an error. The argument is a \fIstruct timeval\fP. If an input or output function blocks for this period of time, and data has been sent or received, the return value of that function will be the amount of data transferred; if no data has been transferred and the timeout has been reached, then \-1 is returned with \fIerrno\fP set to \fBEAGAIN\fP or \fBEWOULDBLOCK\fP, or \fBEINPROGRESS\fP (for \fBconnect\fP(2)) just as if the socket was specified to be nonblocking. If the timeout is set to zero (the default), then the operation will never timeout. Timeouts only have effect for system calls that perform socket I/O (e.g., \fBaccept\fP(2), \fBconnect\fP(2), \fBread\fP(2), \fBrecvmsg\fP(2), \fBsend\fP(2), \fBsendmsg\fP(2)); timeouts have no effect for \fBselect\fP(2), \fBpoll\fP(2), \fBepoll_wait\fP(2), and so on. .TP \fBSO_REUSEADDR\fP .\" commit c617f398edd4db2b8567a28e899a88f8f574798d .\" https://lwn.net/Articles/542629/ Indiquer que les règles utilisées pour la validation des adresses fournies dans un appel à \fBbind\fP(2) doivent autoriser la réutilisation des adresses locales. Pour les sockets \fBAF_INET\fP, cela signifie que le socket peut être attaché à n'importe quelle adresse sauf lorsqu'un socket actif en écoute y est liée. Lorsque le socket en écoute est attaché à \fBINADDR_ANY\fP 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. .TP \fBSO_REUSEPORT\fP (depuis Linux 3.9) Autoriser plusieurs sockets \fBAF_INET\fP ou \fBAF_INET6\fP à être liés à une adresse identique de socket. Cette option doit être déclarée sur chaque socket (y compris le premier socket) avant d’appeler \fBbind\fP(2) sur le socket. Pour prévenir le détournement de port, tous les processus reliés à la même adresse doivent avoir le même UID effectif. Cette option peut être employée avec les sockets TCP et UDP. .IP Pour les sockets TCP, cette option autorise la répartition des charges \fBaccept\fP(2) dans un serveur multithread pour être renforcée en utilisant un socket d’écoute pour chaque thread. Cela améliore la répartition des charges par rapport aux techniques traditionnelles telles qu’un unique thread \fBaccept\fP(2)ant qui répartit les connexions ou d’avoir plusieurs threads qui rivalisent pour \fBaccept\fP(2) à partir du même socket. .IP Pour les sockets UDP, l’utilisation de cette option peut procurer une meilleure répartition des datagrammes entrants vers plusieurs processus (ou threads) par rapport aux techniques traditionnelles d’avoir plusieurs processus rivalisant pour recevoir des datagrammes sur le même socket. .TP \fBSO_RXQ_OVFL\fP (depuis Linux 2.6.33) .\" commit 3b885787ea4112eaa80945999ea0901bf742707f Indiquer qu'un message auxiliaire (cmsg) sous la forme d'une valeur non signée et codée sur 32\ bits doit être joint aux tampons de socket (skb —\ socket buffer), indiquant le nombre de paquets perdus par le socket depuis sa création. .TP \fBSO_SELECT_ERR_QUEUE\fP (depuis Linux 3.10) .\" commit 7d4c04fc170087119727119074e72445f2bb192b .\" Author: Keller, Jacob E .\" It does not affect wake up. Quand cette option est activée sur un socket, une condition d’erreur sur un socket entraîne une notification pas seulement à l’aide de l’ensemble \fIexceptfds\fP de \fBselect\fP(2). De la même façon, \fBpoll\fP(2) renvoie aussi \fBPOLLPRI\fP a chaque fois qu’un évènement \fBPOLLERR\fP est renvoyé. .IP .\" commit 6e5d58fdc9bedd0255a8 .\" ("skbuff: Fix not waking applications when errors are enqueued") Contexte\ : cette option a été ajoutée depuis que le réveil sur une condition d’erreur se produisait seulement au travers des ensembles \fIreadfds\fP et \fIwritefds\fP de \fBselect\fP(2). Cette option a été ajoutée pour permettre la supervision des conditions d’erreur à l’aide de l’argument \fIexceptfds\fP sans avoir simultanément à recevoir des notifications (à l’aide de \fIreadfds\fP) pour des données régulières pouvant être lues à partir du socket. Après les changements dans Linux\ 4.16, l’utilisation de cet indicateur n’est plus nécessaire. Cette option est néanmoins conservée pour la rétrocompatibilité. .TP \fBSO_SNDBUF\fP .\" Most (all?) other implementations do not do this -- MTK, Dec 05 .\" See also the comment to SO_RCVBUF (17 Jul 2012 LKML mail) Définir ou lire 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 \fBsetsockopt\fP(2), et cette valeur doublée est retournée par \fBgetsockopt\fP(2). La valeur par défaut est définie par le fichier \fI/proc/sys/net/core/wmem_default\fP et la valeur maximale autorisée est définie par le fichier \fI/proc/sys/net/core/wmem_max\fP. La valeur (doublée) minimale pour cette option est\ 2048. .TP \fBSO_SNDBUFFORCE\fP (depuis Linux 2.6.14) En utilisant cette option de socket, un processus privilégié (\fBCAP_NET_ADMIN\fP) peut exécuter la même tâche que \fBSO_SNDBUF\fP, mais la limite \fIwmem_max\fP peut être remplacée. .TP \fBSO_TIMESTAMP\fP Activer ou désactiver la réception des messages de contrôle \fBSO_TIMESTAMP\fP. Le message de contrôle d'horodatage est envoyé avec le niveau \fBSOL_SOCKET\fP et un \fIcmsg_type\fP de \fBSCM_TIMESTAMP\fP. Le champ \fIcmsg_data\fP est une structure \fItimeval\fP indiquant la date de réception du dernier paquet fourni à l'utilisateur dans cet appel. Consultez \fBcmsg\fP(3) pour plus de détails sur les messages de contrôle. .TP \fBSO_TIMESTAMPNS\fP (depuis Linux 2.6.22) .\" commit 92f37fd2ee805aa77925c1e64fd56088b46094fc Activer ou désactiver la réception des messages de contrôle \fBSO_TIMESTAMPNS\fP. Le message de contrôle d'horodatage est envoyé avec le niveau \fBSOL_SOCKET\fP et un \fIcmsg_type\fP de \fBSCM_TIMESTAMPNS\fP. Le champ \fIcmsg_data\fP est une structure \fItimespec\fP indiquant la date de réception du dernier paquet fourni à l'utilisateur dans cet appel. L’horloge utilisée pour l’horodatage est \fBCLOCK_REALTIME\fP. Consultez \fBcmsg\fP(3) pour plus de détails sur les messages de contrôle. .IP Un socket ne peut pas mélanger \fBSO_TIMESTAMP\fP et \fBSO_TIMESTAMPNS\fP, les deux modes sont mutuellement exclusifs. .TP \fBSO_TYPE\fP Lire le type de socket, sous forme d'entier (par exemple, \fBSOCK_STREAM\fP). Cette option de socket peut être seulement lue, et pas modifiée. .TP \fBSO_BUSY_POLL\fP (depuis Linux 3.11) Définir la durée approximative, en milliseconde, d’attente active de réception bloquante en absence de données. \fBCAP_NET_ADMIN\fP est nécessaire pour augmenter cette valeur. La valeur par défaut pour cette option est contrôlée par le fichier \fI/proc/sys/net/core/busy_read\fP. .IP La valeur dans le fichier \fI/proc/sys/net/core/busy_poll\fP détermine la durée pendant laquelle \fBselect\fP(2) et \fBpoll\fP(2) seront en attente active lors d’une opération sur des sockets avec \fBSO_BUSY_POLL\fP défini et qu’aucun événement à signaler n’est trouvé. .IP Dans les deux cas, l’attente active ne sera réalisée que lorsque les dernières données reçues par le socket proviennent d’un périphérique réseau qui prend en charge cette option. .IP Bien que l’attente active peut améliorer la latence de quelques applications, une attention particulière doit être portée à son utilisation puisque cela augmentera à la fois l’utilisation du processeur et la consommation de puissance. .SS Signaux Lors de l'écriture sur un socket orienté connexion qui a été fermé (localement ou à l'autre extrémité), le signal \fBSIGPIPE\fP est envoyé au processus qui écrivait et \fBEPIPE\fP est renvoyé. Le signal n'est pas envoyé lorsque l'appel d'écriture indiqué contenait l'attribut \fBMSG_NOSIGNAL\fP. .PP Lorsque demandé avec l'option \fBFIOSETOWN\fP de \fBfcntl\fP(2) ou l'option \fBSIOCSPGRP\fP de \fBioctl\fP(2), le signal \fBSIGIO\fP est envoyé quand un événement d'entrée\-sortie a lieu. Il est possible d'utiliser \fBpoll\fP(2) ou \fBselect\fP(2) dans le gestionnaire de signal pour savoir sur quel 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 \fBfnctl\fP(2) \fBF_SETSIG\fP. Le gestionnaire du signal en temps réel sera appelé avec le descripteur de fichier dans le champ \fIsi_fd\fP de son \fIsiginfo_t\fP. Consultez \fBfcntl\fP(2) pour plus d'informations. .PP .\" .SS Ancillary messages Dans certains cas (par exemple, différents processus accédant au même socket), la condition ayant déclenché le signal \fBSIGIO\fP 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. .SS "/proc interfaces" Les paramètres réseau de base des sockets sont accessibles en utilisant les fichiers du répertoire \fI/proc/sys/net/core/\fP. .TP \fIrmem_default\fP contient la taille en octets par défaut du tampon de réception du socket. .TP \fIrmem_max\fP contient la taille maximale en octets du tampon de réception qu'un utilisateur peut définir avec l'option \fBSO_RCVBUF\fP du socket. .TP \fIwmem_default\fP contient la taille en octets par défaut du tampon d'émission du socket. .TP \fIwmem_max\fP contient la taille maximale en octets du tampon d'émission qu'un utilisateur peut définir avec l'option \fBSO_SNDBUF\fP du socket. .TP \fImessage_cost\fP et \fImessage_burst\fP configurent le filtrage par seau à jetons (token bucket) utilisé pour limiter la charge des messages d'avertissement dus aux événements réseau extérieurs. .TP \fInetdev_max_backlog\fP contient le nombre maximal de paquets dans la file d'entrée globale. .TP \fIoptmem_max\fP .\" netdev_fastroute is not documented because it is experimental contient la taille maximale par socket des données auxiliaires et des données de contrôle utilisateur comme les «\ iovec\ ». .SS Ioctls Ces opérations sont accessibles en utilisant \fBioctl\fP(2)\ : .PP .in +4n .EX \fIerror\fP\fB = ioctl(\fP\fIip_socket\fP\fB, \fP\fItype_ioctl\fP\fB, \fP\fI&valeur_résultat\fP\fB);\fP .EE .in .TP \fBSIOCGSTAMP\fP .\" Renvoyer une structure \fItimeval\fP 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 \fBsetitimer\fP(2) pour une description de la structure \fItimeval\fP. L'ioctl ne doit être utilisé que si les options \fBSO_TIMESTAMP\fP et \fBSO_TIMESTAMPNS\fP du socket ne sont pas définies. Sinon, la date du dernier paquet reçu quand \fBSO_TIMESTAMP\fP et \fBSO_TIMESTAMPNS\fP n'étaient pas définies est renvoyée, ou un échec est constaté si de tels paquets ne sont pas reçus (c'est\-à\-dire que \fBioctl\fP(2) renvoie \fB\-1\fP avec un \fIerrno\fP défini à \fBENOENT\fP). .TP \fBSIOCSPGRP\fP Définir le processus ou le groupe de processus qui doivent recevoir les signaux \fBSIGIO\fP ou \fBSIGURG\fP quand les E/S deviennent possibles ou que des données urgentes sont disponibles. L’argument est un pointeur vers un \fIpid_t\fP. Pour d’autres détails, consultez la description de \fBF_SETOWN\fP dans \fBfcntl\fP(2). .TP \fBFIOASYNC\fP Changer l'attribut \fBO_ASYNC\fP pour activer ou désactiver le mode d'entrée\-sortie asynchrone du socket. Un mode d'entrée\-sortie asynchrone signifie que le signal \fBSIGIO\fP ou le signal défini avec \fBF_SETSIG\fP est envoyé quand un événement d'entrée\-sortie se produit. .IP .\" Le paramètre est un entier booléen. (Cette opération est synonyme de l'utilisation de \fBfcntl\fP(2) pour définir l'attribut \fBO_ASYNC\fP). .TP \fBSIOCGPGRP\fP Lire le processus ou le groupe de processus en cours auquel les signaux \fBSIGIO\fP ou \fBSIGURG\fP sont envoyés. Zéro est obtenu quand aucun n'est défini. .PP Opérations \fBfcntl\fP(2) valables\ : .TP \fBFIOGETOWN\fP Identique à l'\fBioctl\fP(2) \fBSIOCGPGRP\fP. .TP \fBFIOSETOWN\fP Identique à l'\fBioctl\fP(2) \fBSIOCSPGRP\fP. .SH VERSIONS \fBSO_BINDTODEVICE\fP a été introduit dans Linux\ 2.0.30. \fBSO_PASSCRED\fP est une nouveauté de Linux\ 2.2. Les interfaces \fI/proc\fP ont été introduites dans Linux\ 2.2. \fBSO_RCVTIMEO\fP et \fBSO_SNDTIMEO\fP sont gérés depuis Linux\ 2.3.41. Auparavant, les délais d'attente étaient définis selon un réglage spécifique aux protocoles et ne pouvaient être ni lus ni modifiés. .SH 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 \fI/proc\fP correspondants sont deux fois plus grandes que ce que l'on peut observer directement sur le câble. .PP .\" .SH AUTHORS .\" This man page was written by Andi Kleen. Linux ne permettra la réutilisation des ports qu'avec l'option \fBSO_REUSEADDR\fP lorsque celle\-ci sera définie à la fois par le précédent programme qui a effectué un \fBbind\fP(2) sur le port et par le programme qui veut réutiliser ce port. Cela diffère de certaines implémentations (par exemple, sur FreeBSD) où seul le dernier programme doit définir l'option \fBSO_REUSEADDR\fP. Habituellement, cette différence est invisible, puisque, par exemple, un programme serveur est conçu pour toujours définir cette option. .SH "VOIR AUSSI" \fBwireshark\fP(1), \fBbpf\fP(2), \fBconnect\fP(2), \fBgetsockopt\fP(2), \fBsetsockopt\fP(2), \fBsocket\fP(2), \fBpcap\fP(3), \fBaddress_families\fP(7), \fBcapabilities\fP(7), \fBddp\fP(7), \fBip\fP(7), \fBipv6\fP(7), \fBpacket\fP(7), \fBtcp\fP(7), \fBudp\fP(7), \fBunix\fP(7), \fBtcpdump\fP(8) .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot , Cédric Boutillier , Frédéric Hantrais et Jean-Paul Guillonneau . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .