perkamon - en to fr translation catalogue (686 entries)

note: type: TH
en: 2010-09-10
fr: 10 septembre 2010

note: type: TH
en: Linux Programmer's Manual
fr: Manuel du programmeur Linux

note: type: SH
en: NAME
fr: NOM

note: type: Plain text
en: accept, accept4 - accept a connection on a socket
fr: accept, accept4 - Accepter une connexion sur une socket

note: type: Plain text
en: B<#include E<lt>sys/types.hE<gt>>          /* See NOTES */
    B<#include E<lt>sys/socket.hE<gt>>
fr: B<#include E<lt>sys/types.hE<gt>>          /* Consultez NOTES */
    B<#include E<lt>sys/socket.hE<gt>>

note: type: Plain text
en: B<#define _GNU_SOURCE>             /* See feature_test_macros(7) */
    B<#include E<lt>sys/socket.hE<gt>>
fr: B<#define _GNU_SOURCE>             /* Consultez feature_test_macros(7) */
    B<#include E<lt>sys/socket.hE<gt>>

note: type: Plain text
en: The B<accept>()  system call is used with connection-based socket types (B<SOCK_STREAM>, B<SOCK_SEQPACKET>).  It extracts the first connection request on the queue of pending connections for the listening socket, I<sockfd>, creates a new connected socket, and returns a new file descriptor referring to that socket.  The newly created socket is not in the listening state.  The original socket I<sockfd> is unaffected by this call.
fr: L'appel système B<accept>() est employé avec les sockets utilisant un protocole en mode connecté (B<SOCK_STREAM>, B<SOCK_SEQPACKET>). Il extrait la première connexion de la file des connexions en attente de la socket I<sockfd> à l'écoute, crée une nouvelle socket et alloue pour cette socket un nouveau descripteur de fichier qu'il renvoie. La nouvelle socket n'est pas en état d'écoute. La socket originale I<sockfd> n'est pas modifiée par l'appel système.

note: type: Plain text
en: The argument I<sockfd> is a socket that has been created with B<socket>(2), bound to a local address with B<bind>(2), and is listening for connections after a B<listen>(2).
fr: L'argument I<sockfd> est une socket qui a été créée avec la fonction B<socket>(2), attachée à une adresse avec B<bind>(2), et attend des connexions après un appel B<listen>(2).

note: type: Plain text
en: The argument I<addr> is a pointer to a I<sockaddr> structure.  This structure is filled in with the address of the peer socket, as known to the communications layer.  The exact format of the address returned I<addr> is determined by the socket's address family (see B<socket>(2)  and the respective protocol man pages).  When I<addr> is NULL, nothing is filled in; in this case, I<addrlen> is not used, and should also be NULL.
fr: L'argument I<addr> est un pointeur sur une structure I<sockaddr>. La structure sera remplie avec l'adresse du correspondant se connectant, telle qu'elle est connue par la couche de communication. Le format exact du paramètre I<addr> dépend du domaine dans lequel la communication s'établit (consultez B<socket>(2) et la page de manuel correspondant au protocole). Quand I<addr> vaut NULL, rien n'est rempli ; dans ce cas, I<addrlen> n'est pas utilisé et doit aussi valoir NULL.

note: type: Plain text
en: The I<addrlen> argument is a value-result argument: the caller must initialize it to contain the size (in bytes) of the structure pointed to by I<addr>; on return it will contain the actual size of the peer address.
fr: I<addrlen> est un paramètre-résultat\ : l'appelant doit l'initialiser de telle sorte qu'il contienne la taille (en octets) de la structure pointée par I<addr>, et est renseigné au retour par la longueur réelle (en octets) de l'adresse remplie.

note: type: Plain text
en: The returned address is truncated if the buffer provided is too small; in this case, I<addrlen> will return a value greater than was supplied to the call.
fr: L'adresse renvoyée est tronquée si le tampon fourni est trop petit ; dans ce cas, I<addrlen> renverra une valeur supérieure à celle fournie lors de l'appel.

note: type: Plain text
en: If no pending connections are present on the queue, and the socket is not marked as nonblocking, B<accept>()  blocks the caller until a connection is present.  If the socket is marked nonblocking and no pending connections are present on the queue, B<accept>()  fails with the error B<EAGAIN> or B<EWOULDBLOCK>.
fr: S'il n'y a pas de connexion en attente dans la file, et si la socket n'est pas marquée comme non\(hybloquante, B<accept>() se met en attente d'une connexion. Si la socket est non\(hybloquante, et qu'aucune connexion n'est présente dans la file, B<accept>() retourne une erreur B<EAGAIN> ou B<EWOULDBLOCK>.

note: type: Plain text
en: In order to be notified of incoming connections on a socket, you can use B<select>(2)  or B<poll>(2).  A readable event will be delivered when a new connection is attempted and you may then call B<accept>()  to get a socket for that connection.  Alternatively, you can set the socket to deliver B<SIGIO> when activity occurs on a socket; see B<socket>(7)  for details.
fr: Pour être prévenu de l'arrivée d'une connexion sur une socket, on peut utiliser B<select>(2) ou B<poll>(2). Un événement «\ lecture\ » sera délivré lorsqu'une tentative de connexion aura lieu, et on pourra alors appeler B<accept>() pour la valider. Autrement, on peut configurer la socket pour qu'elle envoie un signal B<SIGIO> lorsqu'une activité la concernant se produit, consultez B<socket>(7) pour plus de détails.

note: type: Plain text
en: For certain protocols which require an explicit confirmation, such as DECNet, B<accept>()  can be thought of as merely dequeuing the next connection request and not implying confirmation.  Confirmation can be implied by a normal read or write on the new file descriptor, and rejection can be implied by closing the new socket.  Currently only DECNet has these semantics on Linux.
fr: Pour certains protocoles nécessitant une confirmation explicite, comme DECNet, B<accept>() peut être considéré comme extrayant simplement la connexion suivante de la file, sans demander de confirmation. On peut effectuer la confirmation par une simple lecture ou écriture sur le nouveau descripteur, et le rejet en fermant la nouvelle socket. Pour le moment, seul DECNet se comporte ainsi sous Linux.

note: type: Plain text
en: If I<flags> is 0, then B<accept4>()  is the same as B<accept>().  The following values can be bitwise ORed in I<flags> to obtain different behavior:
fr: Si I<flags> vaut 0, alors B<accept4>() est identique à B<accept>(). Les valeurs suivantes peuvent être combinées dans I<flags> par un OU binaire pour obtenir un comportement différent :

note: type: Plain text
en: Set the B<O_NONBLOCK> file status flag on the new open file description.  Using this flag saves extra calls to B<fcntl>(2)  to achieve the same result.
fr: Placer l'attribut d'état de fichier B<O_NONBLOCK> sur le nouveau descripteur de fichier ouvert. Utiliser cet attribut économise des appels supplémentaires à B<fcntl>(2) pour obtenir le même résultat.

note: type: Plain text
en: Set the close-on-exec (B<FD_CLOEXEC>)  flag on the new file descriptor.  See the description of the B<O_CLOEXEC> flag in B<open>(2)  for reasons why this may be useful.
fr: Placer l'attribut « close-on-exec » (B<FD_CLOEXEC>) sur le nouveau descripteur de fichier. Consultez la description de l'attribut B<O_CLOEXEC> dans B<open>(2) pour savoir pourquoi cela peut être utile.

note: type: SH
en: RETURN VALUE
fr: VALEUR RENVOYÉE

note: type: Plain text
en: On success, these system calls return a nonnegative integer that is a descriptor for the accepted socket.  On error, -1 is returned, and I<errno> is set appropriately.
fr: S'ils réussissent, ces appels système renvoient un entier positif ou nul, qui est un descripteur pour la socket acceptée. En cas d'erreur, ils renvoient -1 et remplissent I<errno> avec le code d'erreur.

note: type: SS
en: Error handling
fr: Traitement des erreurs

note: type: Plain text
en: Linux B<accept>()  (and B<accept4>())  passes already-pending network errors on the new socket as an error code from B<accept>().  This behavior differs from other BSD socket implementations.  For reliable operation the application should detect the network errors defined for the protocol after B<accept>()  and treat them like B<EAGAIN> by retrying.  In the case of TCP/IP, these are B<ENETDOWN>, B<EPROTO>, B<ENOPROTOOPT>, B<EHOSTDOWN>, B<ENONET>, B<EHOSTUNREACH>, B<EOPNOTSUPP>, and B<ENETUNREACH>.
fr: Sous Linux, B<accept>() (et B<accept4>()) renvoie les erreurs réseau déjà en attente sur la socket comme une erreur de l'appel système. Ce comportement diffère d'autres implémentations des sockets BSD. Pour un comportement fiable, une application doit détecter les erreurs réseau définies par le protocole après le B<accept>() et les traiter comme des erreurs B<EAGAIN>, en réitérant le mécanisme. Dans le cas de TCP/IP, ces erreurs sont B<ENETDOWN>, B<EPROTO>, B<ENOPROTOOPT>, B<EHOSTDOWN>, B<ENONET>, B<EHOSTUNREACH>, B<EOPNOTSUPP>, et B<ENETUNREACH>.

note: type: SH
en: ERRORS
fr: ERREURS

note: type: TP
en: B<EAGAIN> or B<EWOULDBLOCK>
fr: B<EAGAIN> ou B<EWOULDBLOCK>

note: Actually EAGAIN on Linux type: Plain text
en: The socket is marked nonblocking and no connections are present to be accepted.  POSIX.1-2001 allows either error to be returned for this case, and does not require these constants to have the same value, so a portable application should check for both possibilities.
fr: La socket est marquée comme étant non bloquante et aucune connexion n'est présente pour être acceptée. POSIX.1-2001 permet de renvoyer l'une ou l'autre des erreurs dans ce cas et n'exige pas que ces constantes aient la même valeur. Une application portable devrait donc tester les deux possibilités.

note: type: Plain text
en: The descriptor is invalid.
fr: Le descripteur est invalide.

note: type: Plain text
en: A connection has been aborted.
fr: Une connexion a été abandonnée.

note: type: Plain text
en: The I<addr> argument is not in a writable part of the user address space.
fr: I<addr> n'est pas dans l'espace d'adressage accessible en écriture.

note: type: Plain text
en: The system call was interrupted by a signal that was caught before a valid connection arrived; see B<signal>(7).
fr: L'appel système a été interrompu par l'arrivée d'un signal avant qu'une connexion valide ne survienne ; consultez B<signal>(7).

note: type: Plain text
en: Socket is not listening for connections, or I<addrlen> is invalid (e.g., is negative).
fr: La socket n'est pas en attente de connexions, ou I<addrlen> est invalide (par exemple négatif).

note: type: Plain text
en: (B<accept4>())  invalid value in I<flags>.
fr: (B<accept4>()) I<flags> contient une valeur incorrecte.

note: type: Plain text
en: The per-process limit of open file descriptors has been reached.
fr: La limite du nombre total de descripteurs de fichier ouverts par processus a été atteinte.

note: type: Plain text
en: The system limit on the total number of open files has been reached.
fr: La limite du nombre total de fichiers ouverts sur le système a été atteinte.

note: type: Plain text
en: Not enough free memory.  This often means that the memory allocation is limited by the socket buffer limits, not by the system memory.
fr: Pas assez de mémoire disponible. En général, cette erreur est due à la taille limitée du tampon des sockets, et non à la mémoire système proprement dite.

note: type: Plain text
en: The descriptor references a file, not a socket.
fr: Le descripteur n'est pas celui d'une socket.

note: type: Plain text
en: The referenced socket is not of type B<SOCK_STREAM>.
fr: La socket utilisée n'est pas de type B<SOCK_STREAM>.

note: type: Plain text
en: Protocol error.
fr: Erreur de protocole.

note: type: Plain text
en: In addition, Linux B<accept>()  may fail if:
fr: De plus, la version Linux de B<accept>() peut échouer si\ :

note: type: Plain text
en: Firewall rules forbid connection.
fr: Les règles du pare-feu interdisent la connexion.

note: type: Plain text
en: In addition, network errors for the new socket and as defined for the protocol may be returned.  Various Linux kernels can return other errors such as B<ENOSR>, B<ESOCKTNOSUPPORT>, B<EPROTONOSUPPORT>, B<ETIMEDOUT>.  The value B<ERESTARTSYS> may be seen during a trace.
fr: De plus il peut se produire des erreurs réseau dépendant du protocole de la socket. Certains noyaux Linux peuvent renvoyer d'autres erreurs comme B<ENOSR>, B<ESOCKTNOSUPPORT>, B<EPROTONOSUPPORT>, B<ETIMEDOUT>. L'erreur B<ERESTARTSYS> peut être rencontrée durant un suivi dans un débogueur.

note: type: Plain text
en: The B<accept4>()  system call is available starting with Linux 2.6.28; support in glibc is available starting with version 2.10.
fr: L'appel système B<accept4>() est disponible depuis Linux 2.6.28 ; la prise en charge dans la glibc est disponible depuis la version\ 2.10.

note: type: SH
en: CONFORMING TO
fr: CONFORMITÉ

note: The BSD man page documents five possible error returns (EBADF, ENOTSOCK, EOPNOTSUPP, EWOULDBLOCK, EFAULT). POSIX.1-2001 documents errors EAGAIN, EBADF, ECONNABORTED, EINTR, EINVAL, EMFILE, ENFILE, ENOBUFS, ENOMEM, ENOTSOCK, EOPNOTSUPP, EPROTO, EWOULDBLOCK. In addition, SUSv2 documents EFAULT and ENO
en: B<accept>(): POSIX.1-2001, SVr4, 4.4BSD, (B<accept>()  first appeared in 4.2BSD).
fr: B<accept>() : POSIX.1-2001, SVr4, BSD\ 4.4 (B<accept>() est apparu dans BSD\ 4.2).

note: type: Plain text
en: B<accept4>()  is a nonstandard Linux extension.
fr: B<accept4>() est une extension non standard de Linux.

note: Some testing seems to show that Tru64 5.1 and HP-UX 11 also do not inherit file status flags -- MTK Jun 05 type: Plain text
en: On Linux, the new socket returned by B<accept>()  does I<not> inherit file status flags such as B<O_NONBLOCK> and B<O_ASYNC> from the listening socket.  This behavior differs from the canonical BSD sockets implementation.  Portable programs should not rely on inheritance or noninheritance of file status flags and always explicitly set all required flags on the socket returned from B<accept>().
fr: Avec la version Linux de B<accept>(), la nouvelle socket n'hérite B<pas> des attributs comme B<O_NONBLOCK> et B<O_ASYNC> de la socket en écoute. Ce comportement est différent de l'implémentation BSD de référence. Les programmes portables ne doivent pas s'appuyer sur cette particularité, et doivent reconfigurer les attributs sur la socket renvoyée par B<accept>().

note: type: Plain text
en: POSIX.1-2001 does not require the inclusion of I<E<lt>sys/types.hE<gt>>, and this header file is not required on Linux.  However, some historical (BSD) implementations required this header file, and portable applications are probably wise to include it.
fr: POSIX.1-2001 ne requiert pas l'inclusion de I<E<lt>sys/types.hE<gt>>, et cet en\(hytête n'est pas nécessaire sous Linux. Cependant, il doit être inclus sous certaines implémentations historiques (BSD), et les applications portables devraient probablement l'utiliser.

note: type: Plain text
en: There may not always be a connection waiting after a B<SIGIO> is delivered or B<select>(2)  or B<poll>(2)  return a readability event because the connection might have been removed by an asynchronous network error or another thread before B<accept>()  is called.  If this happens, then the call will block waiting for the next connection to arrive.  To ensure that B<accept>()  never blocks, the passed socket I<sockfd> needs to have the B<O_NONBLOCK> flag set (see B<socket>(7)).
fr: Il n'y a pas nécessairement de connexion en attente après la réception de B<SIGIO> ou après que B<select>(2) ou B<poll>(2) indiquent quelque chose à lire. En effet la connexion peut avoir été annulée à cause d'une erreur réseau asynchrone ou par un autre thread avant que B<accept>() ne se termine. Si cela se produit, l'appel bloquera en attendant une autre connexion. Pour s'assurer que B<accept>() ne bloquera jamais, la socket I<sockfd> transmise doit avoir l'attribut B<O_NONBLOCK> (consultez B<socket>(7)).

note: type: SS
en: The socklen_t type
fr: Le type socklen_t

note: type: Plain text
en: The third argument of B<accept>()  was originally declared as an I<int *> (and is that under libc4 and libc5 and on many other systems like 4.x BSD, SunOS 4, SGI); a POSIX.1g draft standard wanted to change it into a I<size_t *>, and that is what it is for SunOS 5.  Later POSIX drafts have I<socklen_t *>, and so do the Single UNIX Specification and glibc2.  Quoting Linus Torvalds:
fr: Le troisième argument de B<accept>() était, à l'origine, déclaré comme un I<int *> (ceci dans libc4 et libc5 ainsi que pour beaucoup d'autres systèmes comme BSD\ 4.x, SunOS\ 4, SGI). Une proposition de standard POSIX.1g l'a modifié en I<size_t *> et c'est ce qu'utilise SunOS\ 5. Les dernières propositions POSIX en ont fait un I<socklen_t *>, ce que suivent la Single UNIX Specification et la glibc2. Pour citer Linus Torvalds\ :

note: .I fails: only italicizes a single line type: Plain text
en: "_Any_ sane library _must_ have "socklen_t" be the same size as int.  Anything else breaks any BSD socket layer stuff.  POSIX initially I<did> make it a size_t, and I (and hopefully others, but obviously not too many) complained to them very loudly indeed.  Making it a size_t is completely broken, exactly because size_t very seldom is the same size as "int" on 64-bit architectures, for example.  And it I<has> to be the same size as "int" because that's what the BSD socket interface is.  Anyway, the POSIX people eventually got a clue, and created "socklen_t".  They shouldn't have touched it in the first place, but once they did they felt it had to have a named type for some unfathomable reason (probably somebody didn't like losing face over having done the original stupid thing, so they silently just renamed their blunder)."
fr: «\ I<Toute> bibliothèque sensée I<doit> garder "socklen_t" équivalent à un int. Toute autre chose invaliderait tout le niveau des sockets BSD. POSIX l'avait d'abord remplacé par un size_t, et je m'en suis plaint violemment (ainsi que d'autres heureusement, mais de toute évidence, pas assez). Le remplacement par un size_t est complètement stupide car size_t a rarement la même taille qu'un int sur les architectures 64 bits par exemple. Et il I<doit> avoir la même taille qu'un "int" parce que c'était l'interface des sockets BSD. Quoi qu'il en soit, les gens de POSIX ont compris et ont créé un "socklen_t". Ils n'auraient jamais dû y toucher, mais une fois commencé, ils ont décidé de créer un type spécifique, pour des raisons inavouées (probablement quelqu'un qui ne veut pas perdre la face en expliquant que le premier travail était stupide et ils ont simplement renommé leur bricolage).\ »

note: type: SH
en: EXAMPLE
fr: EXEMPLE

note: type: Plain text
en: See B<bind>(2).
fr: Consultez B<bind>(2).

note: type: SH
en: SEE ALSO
fr: VOIR AUSSI

note: type: Plain text
en: This page is part of release 3.65 of the Linux I<man-pages> project.  A description of the project, and information about reporting bugs, can be found at \%http://www.kernel.org/doc/man-pages/.
fr: Cette page fait partie de la publication 3.65 du projet I<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/.

note: type: TH
en: 2007-12-28
fr: 28 décembre 2007

note: type: Plain text
en: bind - bind a name to a socket
fr: bind - Fournir un nom à une socket

note: type: Plain text
en: When a socket is created with B<socket>(2), it exists in a name space (address family) but has no address assigned to it.  B<bind>()  assigns the address specified by I<addr> to the socket referred to by the file descriptor I<sockfd>.  I<addrlen> specifies the size, in bytes, of the address structure pointed to by I<addr>.  Traditionally, this operation is called \(lqassigning a name to a socket\(rq.
fr: Quand une socket est créée avec l'appel système B<socket>(2), elle existe dans l'espace des noms (famille d'adresses) mais n'a pas d'adresse assignée. B<bind>() affecte l'adresse indiquée dans I<addr> à la socket référencée par le descripteur de fichier I<sockfd>. I<addrlen> indique la taille, en octets, de la structure d'adresse pointée par I<addr>. Traditionnellement cette opération est appelée « affectation d'un nom à une socket ».

note: type: Plain text
en: It is normally necessary to assign a local address using B<bind>()  before a B<SOCK_STREAM> socket may receive connections (see B<accept>(2)).
fr: Il est normalement nécessaire d'affecter une adresse locale avec B<bind>() avant qu'une socket B<SOCK_STREAM> puisse recevoir des connexions (consultez B<accept>(2)).

note: type: Plain text
en: The rules used in name binding vary between address families.  Consult the manual entries in Section 7 for detailed information.  For B<AF_INET> see B<ip>(7), for B<AF_INET6> see B<ipv6>(7), for B<AF_UNIX> see B<unix>(7), for B<AF_APPLETALK> see B<ddp>(7), for B<AF_PACKET> see B<packet>(7), for B<AF_X25> see B<x25>(7)  and for B<AF_NETLINK> see B<netlink>(7).
fr: Les règles d'affectation de nom varient suivant le domaine de communication. Consultez les pages de manuel de la section 7 pour de plus amples informations. Pour B<AF_INET> consultez B<ip>(7), pour B<AF_INET6> consultez B<ipv6>(7), pour B<AF_UNIX> consultez B<unix>(7), pour B<AF_APPLETALK> consultez B<ddp>(7), pour B<AF_PACKET> consultez B<packet>(7), pour B<AF_X25> consultez B<x25>(7) et pour B<AF_NETLINK> consultez B<netlink>(7).

note: type: Plain text
en: The actual structure passed for the I<addr> argument will depend on the address family.  The I<sockaddr> structure is defined as something like:
fr: La structure réellement passée dans le paramètre I<addr> dépend du domaine de communication. La structure I<sockaddr> est définie comme\ :

note: type: Plain text
en: The only purpose of this structure is to cast the structure pointer passed in I<addr> in order to avoid compiler warnings.  See EXAMPLE below.
fr: Le seul objet de cette structure est de transtyper le pointeur passé dans I<addr> pour éviter les avertissements du compilateur. Voir l'exemple donné ci\(hydessous.

note: type: Plain text
en: On success, zero is returned.  On error, -1 is returned, and I<errno> is set appropriately.
fr: S'il réussit, cet appel système renvoie 0. S'il échoue, il renvoie -1 et remplit I<errno> en conséquence.

note: e.g., privileged port in AF_INET domain type: Plain text
en: The address is protected, and the user is not the superuser.
fr: L'adresse est protégée et l'utilisateur n'est pas le superutilisateur.

note: type: Plain text
en: The given address is already in use.
fr: L'adresse est déjà utilisée.

note: type: Plain text
en: I<sockfd> is not a valid descriptor.
fr: I<sockfd> n'est pas un descripteur valable.

note: This may change in the future: see .I linux/unix/sock.c for details. type: Plain text
en: The socket is already bound to an address.
fr: La socket est déjà connectée.

note: type: Plain text
en: I<sockfd> is a descriptor for a file, not a socket.
fr: I<sockfd> est un descripteur de fichier, pas une socket.

note: type: Plain text
en: The following errors are specific to UNIX domain (B<AF_UNIX>)  sockets:
fr: Les erreurs suivantes sont spécifiques aux sockets du domaine UNIX (B<AF_UNIX>)\ :

note: type: Plain text
en: Search permission is denied on a component of the path prefix.  (See also B<path_resolution>(7).)
fr: L'accès à un élément du chemin est interdit (consultez aussi B<path_resolution>(7)).

note: type: Plain text
en: A nonexistent interface was requested or the requested address was not local.
fr: Une interface inexistante est demandée, ou bien l'adresse demandée n'est pas locale.

note: type: Plain text
en: I<addr> points outside the user's accessible address space.
fr: I<addr> pointe en dehors de l'espace d'adresse accessible.

note: type: Plain text
en: The I<addrlen> is wrong, or the socket was not in the B<AF_UNIX> family.
fr: La longueur I<addrlen> est fausse, ou la socket n'est pas de la famille B<AF_UNIX>.

note: type: Plain text
en: Too many symbolic links were encountered in resolving I<addr>.
fr: I<addr> contient des références circulaires (à travers un lien symbolique).

note: type: Plain text
en: I<addr> is too long.
fr: I<addr> est trop long.

note: type: Plain text
en: The file does not exist.
fr: Le fichier n'existe pas.

note: type: Plain text
en: Insufficient kernel memory was available.
fr: Pas assez de mémoire pour le noyau.

note: type: Plain text
en: A component of the path prefix is not a directory.
fr: Un élément du chemin d'accès n'est pas un répertoire.

note: type: Plain text
en: The socket inode would reside on a read-only filesystem.
fr: L'inœud se trouverait dans un système de fichiers en lecture seule.

note: SVr4 documents an additional .B ENOSR general error condition, and additional .B EIO and .B EISDIR UNIX-domain error conditions. type: Plain text
en: SVr4, 4.4BSD, POSIX.1-2001 (B<bind>()  first appeared in 4.2BSD).
fr: SVr4, BSD\ 4.4, POSIX.1-2001 (B<bind>() est apparue dans BSD\ 4.2).

note: type: Plain text
en: The third argument of B<bind>()  is in reality an I<int> (and this is what 4.x BSD and libc4 and libc5 have).  Some POSIX confusion resulted in the present I<socklen_t>, also used by glibc.  See also B<accept>(2).
fr: Le troisième argument de B<bind>() est en fait un I<int> (et c'est ce qu'utilisent BSD\ 4.x, libc4 et libc5). Une certaine confusion POSIX a donné le I<socklen_t> actuel, également utilisé dans la glibc. Consultez B<accept>(2).

note: type: SH
en: BUGS
fr: BOGUES

note: FIXME What *are* transparent proxy options? type: Plain text
en: The transparent proxy options are not described.
fr: Les options de proxy transparent ne sont pas décrites.

note: type: Plain text
en: An example of the use of B<bind>()  with Internet domain sockets can be found in B<getaddrinfo>(3).
fr: Un exemple d'utilisation de B<bind>() avec des sockets Internet se trouve dans B<getaddrinfo>(3).

note: listen.7 refers to this example. accept.7 refers to this example. unix.7 refers to this example. type: Plain text
en: The following example shows how to bind a stream socket in the UNIX (B<AF_UNIX>)  domain, and accept connections:
fr: L'exemple suivant montre comment affecter un nom à une socket du domaine UNIX (B<AF_UNIX>), et accepter les connexions\ :

note: type: Plain text
en:     memset(&my_addr, 0, sizeof(struct sockaddr_un));
                            /* Clear structure */
        my_addr.sun_family = AF_UNIX;
        strncpy(my_addr.sun_path, MY_SOCK_PATH,
                sizeof(my_addr.sun_path) - 1);
fr:     memset(&my_addr, 0, sizeof(struct sockaddr_un));
                            /* Efface la structure */
        my_addr.sun_family = AF_UNIX;
        strncpy(my_addr.sun_path, MY_SOCK_PATH,
                sizeof(my_addr.sun_path) - 1);

note: type: Plain text
en:     /* Now we can accept incoming connections one
           at a time using accept(2) */
fr:     /* Nous pouvons maintenant accepter une connexion
           entrante à la fois grâce à accept(2) */

note: type: Plain text
en:     /* Code to deal with incoming connection(s)... */
fr:     /* Code gérant les connexions entrantes... */

note: type: Plain text
en:     /* When no longer required, the socket pathname, MY_SOCK_PATH
           should be deleted using unlink(2) or remove(3) */
    }
fr:     /* Lorsqu'il n'est plus nécessaire, le fichier de la socket,
           MY_SOCK_PATH, doit être supprimé avec unlink(2) ou remove(3) */

note: type: TH
en: 2013-06-21
fr: 21 juin 2013

note: type: Plain text
en: bindresvport - bind a socket to a privileged IP port
fr: bindresvport - Affecter une socket à un port IP privilégié

note: Glibc actually starts searching with a port # in the range 600 to 1023 type: Plain text
en: B<bindresvport>()  is used to bind a socket descriptor to a privileged anonymous IP port, that is, a port number arbitrarily selected from the range 512 to 1023.
fr: B<bindresvport>() est utilisée pour affecter un descripteur de socket à un port IP privilégié anonyme, c'est-à-dire un numéro de port arbitrairement sélectionné dans l'intervalle [512, 1023].

note: type: Plain text
en: If the B<bind>(2)  performed by B<bindresvport>()  is successful, and I<sin> is not NULL, then I<sin-E<gt>sin_port> returns the port number actually allocated.
fr: Si le B<bind>(2) réalisé par B<bindresvport>() réussi et si I<sin> est non NULL, alors I<sin-E<gt>sin_port> renvoie le numéro de port alloué.

note: type: Plain text
en: I<sin> can be NULL, in which case I<sin-E<gt>sin_family> is implicitly taken to be B<AF_INET>.  However, in this case, B<bindresvport>()  has no way to return the port number actually allocated.  (This information can later be obtained using B<getsockname>(2).)
fr: I<sin> peut être NULL, dans ce cas I<sin-E<gt>sin_family> est simplement considéré comme B<AF_INET>. Cependant, dans ce cas, B<bindresvport>() ne peut renvoyer le port actuellement alloué (cette information peut être obtenu ultérieurement avec B<getsockname>(2)).

note: type: Plain text
en: B<bindresvport>()  returns 0 on success; otherwise -1 is returned and I<errno> set to indicate the cause of the error.
fr: B<bindresvport>() renvoie 0 en cas de succès. En cas d'erreur, -1 est renvoyé et I<errno> est définie.

note: type: Plain text
en: B<bindresvport>()  can fail for any of the same reasons as B<bind>(2).  In addition, the following errors may occur:
fr: B<bindresvport>() peut échouer pour les mêmes raisons que B<bind>(2). De plus, les erreurs suivantes peuvent se produire\ :

note: type: Plain text
en: The caller did not have superuser privilege (to be precise: the B<CAP_NET_BIND_SERVICE> capability is required).
fr: L'appelant n'a pas les privilèges suffisants (la capacité B<CAP_NET_BIND_SERVICE> est nécessaire).

note: type: Plain text
en: All privileged ports are in use.
fr: Tous les ports privilégiés sont utilisés.

note: type: TP
en: B<EAFNOSUPPORT> (B<EPFNOSUPPORT> in glibc 2.7 and earlier)
fr: B<EAFNOSUPPORT> (B<EPFNOSUPPORT> dans la glibc 2.7 et les versions précédentes)

note: type: Plain text
en: I<sin> is not NULL and I<sin-E<gt>sin_family> is not B<AF_INET>.
fr: I<sin> est non NULL et I<sin-E<gt>sin_family> n'est pas B<AF_INET>.

note: type: SH
en: ATTRIBUTES
fr: ATTRIBUTS

note: type: SS
en: Multithreading (see pthreads(7))
fr: Multithreading (voir pthreads(7))

note: type: Plain text
en: Before glibc 2.17, the B<bindresvport>()  function uses a static variable that is not protected, so it is not thread-safe.
fr: Avant glibc 2.17, la fonction B<bindresvport>() utilisait une variable statique non protégée, et n’était donc pas sûre dans un contexte multithread.

note: commit f6da27e53695ad1cc0e2a9490358decbbfdff5e5 type: Plain text
en: Since glibc 2.17, the B<bindresvport>()  function uses a lock to protect static variable, so it is thread-safe.
fr: Depuis glibc 2.17, la fonction B<bindresvport>() utilise un verrou de protection de variable statique, donc elle est sûre dans un contexte multithread.

note: type: Plain text
en: Not in POSIX.1-2001.  Present on the BSDs, Solaris, and many other systems.
fr: Absent de POSIX.1-2001. Présent sur les systèmes BSD, Solaris et beaucoup d'autres.

note: type: Plain text
en: Unlike some B<bindresvport>()  implementations, the glibc implementation ignores any value that the caller supplies in I<sin-E<gt>sin_port>.
fr: Contrairement à d'autres implémentations de B<bindresvport>(), l'implémentation de la glibc ignore toutes les valeurs que l'appelant passe à I<sin-E<gt>sin_port>.

note: type: TH
en: 2008-12-03
fr: 3 décembre 2008

note: type: Plain text
en: connect - initiate a connection on a socket
fr: connect - Débuter une connexion sur une socket

note: type: Plain text
en: B<#include E<lt>sys/types.hE<gt>>          /* See NOTES */
fr: B<#include E<lt>sys/types.hE<gt>>          /* Consultez NOTES */

note: type: Plain text
en: The B<connect>()  system call connects the socket referred to by the file descriptor I<sockfd> to the address specified by I<addr>.  The I<addrlen> argument specifies the size of I<addr>.  The format of the address in I<addr> is determined by the address space of the socket I<sockfd>; see B<socket>(2)  for further details.
fr: L'appel système B<connect>() connecte la socket associée au descripteur de fichier I<sockfd> à l'adresse indiquée par I<addr>. L'argument I<addrlen> indique la taille de I<addr>. Le format de l'adresse I<addr> est déterminé par la famille de la socket I<sockfd>\ ; consultez B<socket>(2) pour plus de détails.

note: type: Plain text
en: If the socket I<sockfd> is of type B<SOCK_DGRAM>, then I<addr> is the address to which datagrams are sent by default, and the only address from which datagrams are received.  If the socket is of type B<SOCK_STREAM> or B<SOCK_SEQPACKET>, this call attempts to make a connection to the socket that is bound to the address specified by I<addr>.
fr: Si la socket I<sockfd> est du type B<SOCK_DGRAM>, alors I<serv_addr> est l'adresse à laquelle les datagrammes seront envoyés par défaut, et la seule adresse depuis laquelle ils seront reçus. Si la socket est du type B<SOCK_STREAM> ou B<SOCK_SEQPACKET>, cette fonction tente de se connecter à une autre socket. L'adresse de l'autre socket est indiquée par I<serv_addr>, qui doit être une adresse (de longueur I<addrlen>) dans le même domaine que la socket. Chaque domaine de communication interprète le paramètre I<addr> à sa manière.

note: type: Plain text
en: Generally, connection-based protocol sockets may successfully B<connect>()  only once; connectionless protocol sockets may use B<connect>()  multiple times to change their association.  Connectionless sockets may dissolve the association by connecting to an address with the I<sa_family> member of I<sockaddr> set to B<AF_UNSPEC> (supported on Linux since kernel 2.2).
fr: En général, les sockets des protocoles orientés connexion ne réussissent un appel B<connect>() qu'une seule fois, alors qu'une socket d'un protocole sans connexion peut appeler B<connect>() plusieurs fois pour changer son affectation. Une socket sans connexion peut interrompre son affectation en se connectant sur une adresse avec le membre I<sa_family> de la structure I<sockaddr> à la valeur B<AF_UNSPEC> (géré par Linux depuis le noyau 2.2).

note: type: Plain text
en: If the connection or binding succeeds, zero is returned.  On error, -1 is returned, and I<errno> is set appropriately.
fr: B<connect>() renvoie 0 s'il réussit, ou -1 s'il échoue, auquel cas I<errno> contient le code d'erreur.

note: type: Plain text
en: The following are general socket errors only.  There may be other domain-specific error codes.
fr: Voici une liste d'erreurs générales concernant les sockets. Il peut en exister d'autres spécifiques au domaine employé.

note: type: Plain text
en: For UNIX domain sockets, which are identified by pathname: Write permission is denied on the socket file, or search permission is denied for one of the directories in the path prefix.  (See also B<path_resolution>(7).)
fr: Pour les sockets de domaine UNIX qui sont spécifiées par un nom de chemin\ : la permission en écriture est refusée sur le fichier socket, ou la permission de parcours est refusée pour l'un des répertoires composant le chemin. (Consultez aussi B<path_resolution>(7).)

note: type: Plain text
en: The user tried to connect to a broadcast address without having the socket broadcast flag enabled or the connection request failed because of a local firewall rule.
fr: L'utilisateur a tenté de se connecter à une adresse broadcast sans avoir activé l'attribut broadcast, ou la demande de connexion a échoué à cause des règles d'un pare-feu local.

note: type: Plain text
en: Local address is already in use.
fr: L'adresse locale est déjà utilisée.

note: type: Plain text
en: The passed address didn't have the correct address family in its I<sa_family> field.
fr: L'adresse transmise n'a pas la bonne valeur dans son champ I<sa_family>.

note: type: Plain text
en: No more free local ports or insufficient entries in the routing cache.  For B<AF_INET> see the description of I</proc/sys/net/ipv4/ip_local_port_range> B<ip>(7)  for information on how to increase the number of local ports.
fr: Pas de port local disponible, ou pas assez de place dans les tables de routage. Pour B<AF_INET>, consultez la description de I</proc/sys/net/ipv4/ip_local_port_range> dans B<ip>(7) pour les informations indiquant comment augmenter le nombre de ports locaux.

note: type: Plain text
en: The socket is nonblocking and a previous connection attempt has not yet been completed.
fr: La socket est non bloquante et une tentative de connexion précédente ne s'est pas encore terminée.

note: type: Plain text
en: The file descriptor is not a valid index in the descriptor table.
fr: Mauvais descripteur.

note: type: Plain text
en: No-one listening on the remote address.
fr: La connexion est refusée par le serveur.

note: type: Plain text
en: The socket structure address is outside the user's address space.
fr: La structure d'adresse pointe en dehors de l'espace d'adressage.

note: type: Plain text
en: The socket is nonblocking and the connection cannot be completed immediately.  It is possible to B<select>(2)  or B<poll>(2)  for completion by selecting the socket for writing.  After B<select>(2)  indicates writability, use B<getsockopt>(2)  to read the B<SO_ERROR> option at level B<SOL_SOCKET> to determine whether B<connect>()  completed successfully (B<SO_ERROR> is zero) or unsuccessfully (B<SO_ERROR> is one of the usual error codes listed here, explaining the reason for the failure).
fr: La socket est non bloquante, et la connexion ne peut pas être établie immédiatement. Il est alors possible d'utiliser B<select>(2) ou B<poll>(2) pour attendre que la socket soit disponible en écriture. Une fois que B<select>(2) confirme la possibilité d'écrire, utilisez B<getsockopt>(2) pour lire l'option B<SO_ERROR> du niveau B<SOL_SOCKET> et déterminer si B<connect>() s'est terminé avec succès (B<SO_ERROR> vaut zéro) ou en échec (B<SO_ERROR> contient l'un des codes d'erreurs listés ici, indiquant le problème).

note: For TCP, the connection will complete asynchronously. See http://lkml.org/lkml/2005/7/12/254 type: Plain text
en: The system call was interrupted by a signal that was caught; see B<signal>(7).
fr: L'appel système a été interrompu par l'arrivée d'un signal avant qu'une connexion valide ne survienne ; consultez B<signal>(7).

note: type: Plain text
en: The socket is already connected.
fr: La socket est déjà connectée.

note: type: Plain text
en: Network is unreachable.
fr: Le réseau est inaccessible.

note: type: Plain text
en: The file descriptor is not associated with a socket.
fr: Le descripteur ne correspond pas à une socket.

note: type: Plain text
en: Timeout while attempting connection.  The server may be too busy to accept new connections.  Note that for IP sockets the timeout may be very long when syncookies are enabled on the server.
fr: Dépassement du délai maximum pendant la connexion. Le serveur peut être trop chargé pour accepter une nouvelle connexion. Remarquez que pour les sockets IP, le délai peut être très long si les syncookies sont activés sur le serveur.

note: SVr4 documents the additional general error codes .BR EADDRNOTAVAIL , .BR EINVAL , .BR EAFNOSUPPORT , .BR EALREADY , .BR EINTR , .BR EPROTOTYPE , and .BR ENOSR . It also documents many additional error conditions not described here. type: Plain text
en: SVr4, 4.4BSD, (the B<connect>()  function first appeared in 4.2BSD), POSIX.1-2001.
fr: SVr4, BSD\ 4.4 (la fonction B<connect>() est apparue dans BSD\ 4.2), POSIX.1-2001.

note: type: Plain text
en: The third argument of B<connect>()  is in reality an I<int> (and this is what 4.x BSD and libc4 and libc5 have).  Some POSIX confusion resulted in the present I<socklen_t>, also used by glibc.  See also B<accept>(2).
fr: Le troisième argument de B<connect>() est en fait un I<int> (et c'est ce qu'utilisent BSD\ 4.x, libc4 et libc5). Une certaine confusion POSIX a donné le «\ I<socklen_t>\ » actuel, également utilisé par glibc. Pour plus de détails, consultez B<accept>(2).

note: type: Plain text
en: An example of the use of B<connect>()  is shown in B<getaddrinfo>(3).
fr: B<getaddrinfo>(3) contient un exemple d'utilisation de B<connect>().

note: type: TH
en: 2014-02-26
fr: 26 février 2014

note: type: Plain text
en: getifaddrs, freeifaddrs - get interface addresses
fr: getifaddrs, freeifaddrs - Renvoyer les adresses des interfaces

note: type: Plain text
en: The B<getifaddrs>()  function creates a linked list of structures describing the network interfaces of the local system, and stores the address of the first item of the list in I<*ifap>.  The list consists of I<ifaddrs> structures, defined as follows:
fr: La fonction B<getifaddrs>() crée une liste chaînée de structures décrivant les interfaces réseau du système local et sauvegarde l'adresse du premier élément de la liste dans I<*ifap>. La liste est constituée de structures I<ifaddrs>, comme définie ci-dessous :

note: type: Plain text
en: The I<ifa_next> field contains a pointer to the next structure on the list, or NULL if this is the last item of the list.
fr: Le champ I<ifa_next> contient un pointeur vers la prochaine structure de la liste ou NULL si c'est le dernier de la liste.

note: The constant .B IF NAMESIZE indicates the maximum length of this field. type: Plain text
en: The I<ifa_name> points to the null-terminated interface name.
fr: I<ifa_name> pointe vers un nom d'interface terminé par un caractère nul.

note: type: Plain text
en: The I<ifa_flags> field contains the interface flags, as returned by the B<SIOCGIFFLAGS> B<ioctl>(2)  operation (see B<netdevice>(7)  for a list of these flags).
fr: Le champ I<ifa_flags> contient les drapeaux de l'interface, comme renvoyé par l'opération B<ioctl>(2) B<SIOCGUFFLAGS> (consultez B<netdevice>(7) pour la liste des drapeaux).

note: type: Plain text
en: The I<ifa_addr> field points to a structure containing the interface address.  (The I<sa_family> subfield should be consulted to determine the format of the address structure.)  This field may contain a null pointer.
fr: Le champ I<ifa_addr> pointe vers une structure contenant l'adresse de l'interface (le sous-champ I<sa_family> devrait être consulté afin de déterminer le format de la structure d'adresse). Ce champ peut contenir un pointeur NULL.

note: type: Plain text
en: The I<ifa_netmask> field points to a structure containing the netmask associated with I<ifa_addr>, if applicable for the address family.  This field may contain a null pointer.
fr: Le champ I<ifa_netmask> pointe vers une structure contenant le masque réseau associé à I<ifa_addr>, si cela est valable pour cette famille d'adresse. Ce champ peut contenir un pointeur NULL.

note: type: Plain text
en: Depending on whether the bit B<IFF_BROADCAST> or B<IFF_POINTOPOINT> is set in I<ifa_flags> (only one can be set at a time), either I<ifa_broadaddr> will contain the broadcast address associated with I<ifa_addr> (if applicable for the address family) or I<ifa_dstaddr> will contain the destination address of the point-to-point interface.
fr: Selon que le bit B<IFF_BROADCAST> ou B<IFF_POINTOPOINT> est défini dans I<ifa_flags> (seul l'un des deux bit peut être défini), soit I<ifa_broadaddr> contiendra l'adresse de diffusion associée à I<ifa_addr> (si cela est applicable avec cette famille d'adresse), ou soit I<ifa_dstaddr> contiendra l'adresse de destination de l'interface point à point.

note: type: Plain text
en: The I<ifa_data> field points to a buffer containing address-family-specific data; this field may be NULL if there is no such data for this interface.
fr: Le champ I<ifa_data> pointe vers un tampon contenant les données spécifique de la famille d'adresse (« address-family-specific data »). Ce champ peut être NULL s'il n'y a aucune donnée de ce type pour cette interface.

note: type: Plain text
en: The data returned by B<getifaddrs>()  is dynamically allocated and should be freed using B<freeifaddrs>()  when no longer needed.
fr: La donnée renvoyée par B<getifaddrs>() est dynamiquement allouée et devrait être libérée avec B<freeifaddrs>().

note: type: Plain text
en: On success, B<getifaddrs>()  returns zero; on error, -1 is returned, and I<errno> is set appropriately.
fr: En cas de réussite, B<getifaddrs>() renvoie 0, en cas d'erreur, elle renvoie -1 et I<errno> est rempli avec le code d'erreur.

note: type: Plain text
en: B<getifaddrs>()  may fail and set I<errno> for any of the errors specified for B<socket>(2), B<bind>(2), B<getsockname>(2), B<recvmsg>(2), B<sendto>(2), B<malloc>(3), or B<realloc>(3).
fr: B<getifaddrs>()  peut échouer et définir I<errno> pour toutes erreurs spécifiées pour B<socket>(2), B<bind>(2), B<getsockname>(2), B<recvmsg>(2), B<sendto>(2), B<malloc>(3) ou B<realloc>(3).

note: type: Plain text
en: The B<getifaddrs>()  function first appeared in glibc 2.3, but before glibc 2.3.3, the implementation supported only IPv4 addresses; IPv6 support was added in glibc 2.3.3.  Support of address families other than IPv4 is available only on kernels that support netlink.
fr: B<getifaddrs>() est apparue dans la glibc 2.3. Les versions antérieures à la glibc 2.3.3 n'implémentaient que l'IPv4. La gestion de l'IPv6 a été ajoutée dans la glibc 2.3.3. La gestion des familles d'adresse autre que IPv4 n'est disponible que si le noyau gère netlink.

note: , but the BSD-derived documentation generally appears to be confused and obsolete on this point. i.e., commonly it still says one of them will be NULL, even if the ifa_ifu union is already present type: Plain text
en: Not in POSIX.1-2001.  This function first appeared in BSDi and is present on the BSD systems, but with slightly different semantics documented\(emreturning one entry per interface, not per address.  This means I<ifa_addr> and other fields can actually be NULL if the interface has no address, and no link-level address is returned if the interface has an IP address assigned.  Also, the way of choosing either I<ifa_broadaddr> or I<ifa_dstaddr> differs on various systems.
fr: Pas dans POSIX.1-2001. Cette fonction est apparue en premier dans BSDi et elle est présente sur les systèmes BSD avec de légères différences sémantiques documentées ; elle renvoie une entrée par interface et non pas par adresse. Cela signifie que I<ifa_addr> et d'autres champs peuvent être NULL si l'interface n'a pas d'adresse, et aucune adresse « link-level » (synonyme d'adresse MAC) n'est renvoyée si l'interface possède une adresse IP. De plus, la façon de choisir soit I<ifa_broadaddr> ou soit I<ifa_dstaddr> varie sur beaucoup de systèmes.

note: type: Plain text
en: The addresses returned on Linux will usually be the IPv4 and IPv6 addresses assigned to the interface, but also one B<AF_PACKET> address per interface containing lower-level details about the interface and its physical layer.  In this case, the I<ifa_data> field may contain a pointer to a I<struct rtnl_link_stats>, defined in I<E<lt>linux/if_link.hE<gt>> (in Linux 2.4 and earlier, I<struct net_device_stats>, defined in I<E<lt>linux/netdevice.hE<gt>>), which contains various interface attributes and statistics.
fr: Les adresses renvoyées sous Linux seront généralement les adresses IPv4 et IPv6 de l'interface, et une adresse B<AF_PACKET> contenant des détails bas niveau de l'interface et de sa couche physique. Dans ce cas, le champ I<ifa_data> peut contenir un pointeur vers une structure I<struct rtnl_link_stats>, définie dans  I<E<lt>linux/if_link.hE<gt>> (pour les versions Linux 2.4 et antérieures, I<net_device_stats>, définie dans I<E<lt>linux/netdevice.hE<gt>>), qui contient différents attributs et statistiques sur les interfaces.

note: type: Plain text
en: The program below demonstrates the use of B<getifaddrs>(), B<freeifaddrs>(), and B<getnameinfo>(3).  Here is what we see when running this program on one system:
fr: Le programme suivant décrit l'utilisation de B<getifaddrs>(), B<freeifaddrs>() et B<getnameinfo>(3). Ci-dessous, la sortie du programme sur un système :

note: type: SS
en: Program source
fr: Source du programme

note: type: Plain text
en: #define _GNU_SOURCE     /* To get defns of NI_MAXSERV and NI_MAXHOST */
    #include E<lt>arpa/inet.hE<gt>
    #include E<lt>sys/socket.hE<gt>
    #include E<lt>netdb.hE<gt>
    #include E<lt>ifaddrs.hE<gt>
    #include E<lt>stdio.hE<gt>
    #include E<lt>stdlib.hE<gt>
    #include E<lt>unistd.hE<gt>
    #include E<lt>linux/if_link.hE<gt>
fr: #define _GNU_SOURCE     /* Afin d'avoir accès aux définitions de NI_MAXSERV et de  NI_MAXHOST */
    #include E<lt>arpa/inet.hE<gt>
    #include E<lt>sys/socket.hE<gt>
    #include E<lt>netdb.hE<gt>
    #include E<lt>ifaddrs.hE<gt>
    #include E<lt>stdio.hE<gt>
    #include E<lt>stdlib.hE<gt>
    #include E<lt>unistd.hE<gt>
    #include E<lt>linux/if_link.hE<gt>

note: type: Plain text
en: getsockname - get socket name
fr: getsockname - Obtenir le nom d'une socket

note: type: Plain text
en: B<getsockname>()  returns the current address to which the socket I<sockfd> is bound, in the buffer pointed to by I<addr>.  The I<addrlen> argument should be initialized to indicate the amount of space (in bytes) pointed to by I<addr>.  On return it contains the actual size of the socket address.
fr: B<getsockname>() renvoie, dans le tampon pointé par I<addr>, l'adresse à laquelle la socket I<sockfd> est liée. Le paramètre I<addrlen> doit être initialisé pour indiquer la taille de la zone mémoire pointée par I<addr>. En retour, il contiendra la taille effective (en octets) de l'adresse de la socket.

note: type: Plain text
en: The argument I<sockfd> is not a valid descriptor.
fr: I<sockfd> n'est pas un descripteur valable.

note: type: Plain text
en: The I<addr> argument points to memory not in a valid part of the process address space.
fr: Le paramètre I<addr> pointe en dehors de l'espace d'adressage accessible.

note: type: Plain text
en: I<addrlen> is invalid (e.g., is negative).
fr: I<addrlen> n'est pas valable (négatif, par exemple).

note: type: Plain text
en: Insufficient resources were available in the system to perform the operation.
fr: Les ressources système disponibles sont insuffisantes.

note: type: Plain text
en: The argument I<sockfd> is a file, not a socket.
fr: Le paramètre I<sockfd> est un fichier, pas une socket.

note: SVr4 documents additional ENOMEM and ENOSR error codes. type: Plain text
en: SVr4, 4.4BSD (the B<getsockname>()  function call appeared in 4.2BSD), POSIX.1-2001.
fr: SVr4, BSD\ 4.4 (la fonction B<getsockname>() est apparue dans BSD\ 4.2), POSIX.1-2001.

note: type: Plain text
en: The third argument of B<getsockname>()  is in reality an I<int\ *> (and this is what 4.x BSD and libc4 and libc5 have).  Some POSIX confusion resulted in the present I<socklen_t>, also used by glibc.  See also B<accept>(2).
fr: Le troisième argument de B<getsockname>() est en fait un I<int\ *> (et c'est ce qu'utilisent BSD\ 4.x, libc4 et libc5). Une certaine confusion POSIX a donné le I<socklen_t> actuel, également utilisé par la glibc. Consultez aussi B<accept>(2).

note: type: TH
en: 2014-01-24
fr: 24 janvier 2014

note: type: Plain text
en: getsockopt, setsockopt - get and set options on sockets
fr: getsockopt, setsockopt - Lire et écrire les options d'une socket

note: type: Plain text
en: B<getsockopt>()  and B<setsockopt>()  manipulate options for the socket referred to by the file descriptor I<sockfd>.  Options may exist at multiple protocol levels; they are always present at the uppermost socket level.
fr: B<getsockopt>() et B<setsockopt>() manipulent les options associées à la socket à laquelle fait référence le descripteur de fichier I<sockfd>. Ces options peuvent exister aux divers niveaux de protocole, et sont toujours présentes au niveau socket le plus élevé.

note: type: Plain text
en: When manipulating socket options, the level at which the option resides and the name of the option must be specified.  To manipulate options at the sockets API level, I<level> is specified as B<SOL_SOCKET>.  To manipulate options at any other level the protocol number of the appropriate protocol controlling the option is supplied.  For example, to indicate that an option is to be interpreted by the B<TCP> protocol, I<level> should be set to the protocol number of B<TCP>; see B<getprotoent>(3).
fr: Quand on manipule une option d'une socket, il faut préciser le niveau où elle s'applique, et le nom de l'option. Au niveau de l'API des sockets, I<level> prend la valeur B<SOL_SOCKET>. Pour tous les autres niveaux, il faut fournir le numéro de protocole approprié. Par exemple, pour une option interprétée par le protocole B<TCP>, I<level> prendra le numéro du protocole B<TCP>. Consultez B<getprotoent>(3).

note: type: Plain text
en: The arguments I<optval> and I<optlen> are used to access option values for B<setsockopt>().  For B<getsockopt>()  they identify a buffer in which the value for the requested option(s) are to be returned.  For B<getsockopt>(), I<optlen> is a value-result argument, initially containing the size of the buffer pointed to by I<optval>, and modified on return to indicate the actual size of the value returned.  If no option value is to be supplied or returned, I<optval> may be NULL.
fr: Les paramètres I<optval> et I<optlen> sont utilisés pour déterminer les options pour B<setsockopt>(). Pour B<getsockopt> ils identifient un tampon dans lequel la valeur de l'option désirée doit être renvoyée. Pour B<getsockopt>, I<optlen> est un paramètre résultat, contenant initialement la taille du tampon pointé par I<optval>, et rempli en retour pour indiquer la taille effective des valeurs renvoyées. Si aucune option n'est fournie ou renvoyée, I<optval> peut être NULL.

note: type: Plain text
en: I<Optname> and any specified options are passed uninterpreted to the appropriate protocol module for interpretation.  The include file I<E<lt>sys/socket.hE<gt>> contains definitions for socket level options, described below.  Options at other protocol levels vary in format and name; consult the appropriate entries in section 4 of the manual.
fr: I<optname> et toute autre option sont passés sans interprétation au protocole approprié, pour qu'il l'interprète lui\(hymême. Le fichier d'en\(hytête I<E<lt>sys/socket.hE<gt>> contient les définitions pour le niveau socket. Les options pour les autres niveaux de protocole peuvent varier tant en format qu'en nom, consultez les pages de manuel de la section 7 pour plus d'informations.

note: type: Plain text
en: Most socket-level options utilize an I<int> argument for I<optval>.  For B<setsockopt>(), the argument should be nonzero to enable a boolean option, or zero if the option is to be disabled.
fr: La plupart des options au niveau socket utilisent un paramètre de type I<int> pour I<optval>. Pour B<setsockopt>(), un paramètre non nul valide une option booléenne, et zéro l'invalide.

note: type: Plain text
en: For a description of the available socket options see B<socket>(7)  and the appropriate protocol man pages.
fr: Pour une description des options disponibles consultez B<socket>(7) et les pages correspondant au protocole concerné.

note: type: Plain text
en: The address pointed to by I<optval> is not in a valid part of the process address space.  For B<getsockopt>(), this error may also be returned if I<optlen> is not in a valid part of the process address space.
fr: I<optval> pointe en dehors de l'espace d'adressage accessible. Avec B<getsockopt>(), ceci peut s'appliquer également à I<optlen>.

note: type: Plain text
en: I<optlen> invalid in B<setsockopt>().  In some cases this error can also occur for an invalid value in I<optval> (e.g., for the B<IP_ADD_MEMBERSHIP> option described in B<ip>(7)).
fr: I<optlen> non valable pour B<setsockopt>(). Dans certains cas cette erreur peut aussi se produire pour une valeur non valable de I<optval> (par exemple, pour l'option B<IP_ADD_MEMBERSHIP> décrite dans B<ip>(7)).

note: type: Plain text
en: The option is unknown at the level indicated.
fr: L'option est inconnue pour ce protocole.

note: SVr4 documents additional ENOMEM and ENOSR error codes, but does not document the .BR SO_SNDLOWAT ", " SO_RCVLOWAT ", " SO_SNDTIMEO ", " SO_RCVTIMEO options type: Plain text
en: SVr4, 4.4BSD (these system calls first appeared in 4.2BSD), POSIX.1-2001.
fr: SVr4, BSD\ 4.4 (ces appels système sont apparus dans BSD\ 4.2), POSIX.1-2001.

note: type: Plain text
en: The I<optlen> argument of B<getsockopt>()  and B<setsockopt>()  is in reality an I<int [*]> (and this is what 4.x BSD and libc4 and libc5 have).  Some POSIX confusion resulted in the present I<socklen_t>, also used by glibc.  See also B<accept>(2).
fr: Le paramètre I<optlen> de B<getsockopt>() et B<setsockopt>() est en fait un I<int [*]> (et c'est ce qu'utilisent BSD\ 4.x, libc4 et libc5). Une certaine confusion POSIX a donné le I<socklen_t> actuel, également utilisé par glibc. Pour plus de détails consultez B<accept>(2).

note: type: Plain text
en: Several of the socket options should be handled at lower levels of the system.
fr: Plusieurs options sur les sockets devraient être gérées à un niveau plus bas par le système.

note: type: TH
en: 2012-11-21
fr: 21 novembre 2012

note: type: Plain text
en: if_nameindex, if_freenameindex - get network interface names and indexes
fr: if_nameindex, if_freenameindex - Obtenir le nom et l'indice des interfaces réseau

note: type: Plain text
en: The B<if_nameindex>()  function returns an array of I<if_nameindex> structures, each containing information about one of the network interfaces on the local system.  The I<if_nameindex> structure contains at least the following entries:
fr: La fonction B<if_nameindex>() renvoie un tableau de structures I<if_nameindex>, contenant chacune des informations au sujet d'une des interfaces réseau du système local. La structure I<if_nameindex> contient au moins les champs suivants :

note: type: Plain text
en:     unsigned int if_index; /* Index of interface (1, 2, ...) */
        char        *if_name;  /* Null-terminated name ("eth0", etc.) */
fr:     unsigned int if_index; /* indice de l'interface (1, 2, etc.) */
        char        *if_name;  /* nom terminé par un caractère nul ("eth0", etc.) */

note: type: Plain text
en: The I<if_index> field contains the interface index.  The I<ifa_name> field points to the null-terminated interface name.  The end of the array is indicated by entry with I<if_index> set to zero and I<ifa_name> set to NULL.
fr: Le champ I<if_index> contient l'indice de l'interface. Le champ I<ifa_name> pointe vers le nom de l'interface, donné par une chaîne terminée par un caractère nul. La fin du tableau est indiquée par une entrée dont les champs I<if_index> et I<ifa_name> valent respectivement 0 et le pointeur NULL.

note: type: Plain text
en: The data structure returned by B<if_nameindex>()  is dynamically allocated and should be freed using B<if_freenameindex>()  when no longer needed.
fr: La donnée renvoyée par B<if_nameindex>() est dynamiquement allouée et devrait être libérée avec B<if_freenameindex>() lorsqu'elle n'est plus utilisée.

note: type: Plain text
en: On success, B<if_nameindex>()  returns pointer to the array; on error, NULL is returned, and I<errno> is set appropriately.
fr: En cas de réussite, B<if_nameindex>() renvoie un pointeur vers le tableau. En cas d'erreur, elle renvoie un pointeur NULL et I<errno> est rempli avec le code d'erreur.

note: type: Plain text
en: B<if_nameindex>()  may fail and set I<errno> if:
fr: B<if_nameindex>() peut échouer et remplir I<errno> si :

note: type: Plain text
en: Insufficient resources available.
fr: les ressources disponibles sont insuffisantes.

note: type: Plain text
en: B<if_nameindex>()  may also fail for any of the errors specified for B<socket>(2), B<bind>(2), B<ioctl>(2), B<getsockname>(2), B<recvmsg>(2), B<sendto>(2), or B<malloc>(3).
fr: B<getifaddrs>()  peut aussi échouer  pour les erreurs précisées pour B<socket>(2), B<bind>(2), B<getsockname>(2), B<recvmsg>(2), B<sendto>(2) ou B<malloc>(3).

note: type: Plain text
en: The B<if_nameindex>()  function first appeared in glibc 2.1, but before glibc 2.3.4, the implementation supported only interfaces with IPv4 addresses.  Support of interfaces that don't have IPv4 addresses is available only on kernels that support netlink.
fr: B<getifaddrs>() est apparue dans la glibc 2.1. Les versions antérieures à la glibc 2.3.4 ne géraient que les interfaces avec des adresses IPv4. La gestion des interfaces qui n'ont pas d'adresse IPv4 n'est disponible que si le noyau gère netlink.

note: type: Plain text
en: This function first appeared in BSDi.
fr: Cette fonction est d'abord apparue dans BSDi.

note: type: Plain text
en: The program below demonstrates the use of the functions described on this page.  An example of the output this program might produce is the following:
fr: Le programme ci-dessous montre l'utilisation des fonctions décrites dans cette page. Voici un exemple de sortie que ce programme peut produire :

note: type: TH
en: 2014-04-01
fr: 1er avril 2014

note: type: Plain text
en: if_nametoindex, if_indextoname - mappings between network interface names and indexes
fr: if_nametoindex, if_indextoname - Correspondance entre noms d'interfaces réseau et indices

note: type: Plain text
en: B<unsigned int if_nametoindex(const char *>I<ifname>B<);>
fr: B<unsigned int if_nametoindex(const char *>I<nom_if>B<);>

note: type: Plain text
en: B<char *if_indextoname(unsigned int ifindex, char *>I<ifname>B<);>
fr: B<char *if_indextoname(unsigned int indice_if, char *>I<nom_if>B<);>

note: type: Plain text
en: The B<if_nametoindex>()  function returns the index of the network interface corresponding to the name I<ifname>.
fr: La fonction B<if_nametoindex>() renvoie l'indice de l'interface réseau correspondant au nom I<nom_if>.

note: type: Plain text
en: The B<if_indextoname>()  function returns the name of the network interface corresponding to the interface index I<ifindex>.  The name is placed in the buffer pointed to by I<ifname>.  The buffer must allow for the storage of at least B<IF_NAMESIZE> bytes.
fr: La fonction B<if_indextoname>() renvoie le nom de l'interface réseau correspondant à l'indice d'interface I<indice_if>. Le nom est placé dans le tampon sur lequel pointe I<nom_if>. Le tampon doit autoriser le stockage d'au moins B<IF_NAMESIZE> octets.

note: type: Plain text
en: On success, B<if_nametoindex>()  returns the index number of the network interface; on error, 0 is returned and I<errno> is set appropriately.
fr: En cas de réussite, B<if_nametoindex>() renvoie l'indice de l'interface réseau. En cas d'erreur, elle renvoie 0 et I<errno> est rempli avec le code d'erreur.

note: type: Plain text
en: On success, B<if_indextoname>()  returns I<ifname>; on error, NULL is returned and I<errno> is set appropriately.
fr: En cas de réussite, B<if_indextoname>() renvoie I<nom_if>. En cas d'erreur, elle renvoie un pointeur NULL et I<errno> est rempli avec le code d'erreur.

note: type: Plain text
en: B<if_indextoname>()  may fail and set I<errno> if:
fr: B<if_indextoname>() peut échouer et remplir I<errno> si :

note: type: Plain text
en: No interface found for the index.
fr: aucune interface n'est trouvée pour l'indice.

note: type: Plain text
en: B<if_nametoindex>()  and B<if_indextoname>()  may also fail for any of the errors specified for B<socket>(2)  or B<ioctl>(2).
fr: B<if_nametoindex>() et B<if_indextoname>() peuvent aussi échouer pour une des erreurs précisées pour B<socket>(2) ou B<ioctl>(2).

note: type: Plain text
en: The B<if_nametoindex>()  and B<if_indextoname>()  functions are thread-safe.
fr: Les fonctions B<if_nametoindex>() et B<if_indextoname>() sont sûres dans un contexte multithread.

note: type: TH
en: 2008-11-20
fr: 20 novembre 2008

note: type: Plain text
en: listen - listen for connections on a socket
fr: listen - Attendre des connexions sur une socket

note: type: Plain text
en: B<listen>()  marks the socket referred to by I<sockfd> as a passive socket, that is, as a socket that will be used to accept incoming connection requests using B<accept>(2).
fr: B<listen>() marque la socket référencée par I<sockfd> comme une socket passive, c'est-à-dire comme une socket qui sera utilisée pour accepter les demandes de connexions entrantes en utilisant B<accept>(2).

note: type: Plain text
en: The I<sockfd> argument is a file descriptor that refers to a socket of type B<SOCK_STREAM> or B<SOCK_SEQPACKET>.
fr: Le paramètre I<sockfd> est un descripteur de fichier qui fait référence à une socket de type B<SOCK_STREAM> ou B<SOCK_SEQPACKET>.

note: type: Plain text
en: The I<backlog> argument defines the maximum length to which the queue of pending connections for I<sockfd> may grow.  If a connection request arrives when the queue is full, the client may receive an error with an indication of B<ECONNREFUSED> or, if the underlying protocol supports retransmission, the request may be ignored so that a later reattempt at connection succeeds.
fr: Le paramètre I<backlog> définit une longueur maximale pour la file des connexions en attente pour I<sockfd>. Si une nouvelle connexion arrive alors que la file est pleine, le client reçoit une erreur indiquant B<ECONNREFUSED>, ou, si le protocole sous\(hyjacent supporte les retransmissions, la requête peut être ignorée afin qu'un nouvel essai réussisse.

note: type: Plain text
en: Another socket is already listening on the same port.
fr: Une autre socket est déjà à l'écoute sur le même port.

note: type: Plain text
en: The argument I<sockfd> is not a socket.
fr: Le paramètre I<sockfd> n'est pas une socket.

note: type: Plain text
en: The socket is not of a type that supports the B<listen>()  operation.
fr: Le type de socket ne supporte pas l'appel système B<listen>().

note: type: Plain text
en: 4.4BSD, POSIX.1-2001.  The B<listen>()  function call first appeared in 4.2BSD.
fr: BSD\ 4.4, POSIX.1-2001. La fonction B<listen>() est apparue dans BSD\ 4.2.

note: type: Plain text
en: To accept connections, the following steps are performed:
fr: Pour accepter des connexions, les étapes suivantes sont effectuées :

note: type: Plain text
en: A socket is created with B<socket>(2).
fr: Une socket est créée avec B<socket>(2).

note: type: Plain text
en: The socket is bound to a local address using B<bind>(2), so that other sockets may be B<connect>(2)ed to it.
fr: La socket est limitée à une adresse locale avec B<bind>(2), ainsi d'autres sockets peuvent y être B<connect>(2)ées.

note: type: Plain text
en: A willingness to accept incoming connections and a queue limit for incoming connections are specified with B<listen>().
fr: La volonté d'accepter des connexions entrantes et une limite de file pour les connexions entrantes sont spécifiées avec B<listen>().

note: type: Plain text
en: Connections are accepted with B<accept>(2).
fr: Les connexions sont acceptées avec B<accept>(2).

note: type: Plain text
en: The behavior of the I<backlog> argument on TCP sockets changed with Linux 2.2.  Now it specifies the queue length for I<completely> established sockets waiting to be accepted, instead of the number of incomplete connection requests.  The maximum length of the queue for incomplete sockets can be set using I</proc/sys/net/ipv4/tcp_max_syn_backlog>.  When syncookies are enabled there is no logical maximum length and this setting is ignored.  See B<tcp>(7)  for more information.
fr: Le comportement de I<backlog> a été modifié sur les sockets TCP dans Linux 2.2. Il s'agit à présent de la longueur de la file d'attente pour les socket I<totalement> établies en attente d'acceptation, plutôt que les requêtes de connexion incomplètes. La longueur maximale de la file d'attente des connexions incomplètes peut être configurée avec I</proc/sys/net/ipv4/tcp_max_syn_backlog>. Lorsque les syncookies sont activés, il n'y a pas de longueur maximale et la configuration est ignorée. Consultez B<tcp>(7) pour plus de détails.

note: The following is now rather historic information (MTK, Jun 05) Don't rely on this value in portable applications since BSD (and some BSD-derived systems) limit the backlog to 5. type: Plain text
en: If the I<backlog> argument is greater than the value in I</proc/sys/net/core/somaxconn>, then it is silently truncated to that value; the default value in this file is 128.  In kernels before 2.4.25, this limit was a hard coded value, B<SOMAXCONN>, with the value 128.
fr: Si l'argument I<backlog> est plus grand que la valeur indiquée dans le fichier I</proc/sys/net/core/somaxconn>, il est tronqué à cette valeur\ ; la valeur par défaut dans ce fichier est 128. Dans les noyaux précédant 2.4.25, cette limite était une valeur fixe, B<SOMAXCONN>, qui valait également 128.

note: type: TH
en: 2014-02-11
fr: 11 février 2014

note: type: Plain text
en: recv, recvfrom, recvmsg - receive a message from a socket
fr: recv, recvfrom, recvmsg - Recevoir un message sur une socket

note: type: Plain text
en: The B<recv>(), B<recvfrom>(), and B<recvmsg>()  calls are used to receive messages from a socket.  They may be used to receive data on both connectionless and connection-oriented sockets.  This page first describes common features of all three system calls, and then describes the differences between the calls.
fr: Les appels système B<recv>(), B<recvfrom>() et B<recvmsg>() sont utilisés pour recevoir des messages depuis une socket, et peuvent servir sur une socket orientée connexion ou non. Cette page décrit dans un premier temps les fonctionnalités communes de ces trois appels système, puis précise ensuite ce qui les différencie.

note: type: Plain text
en: All three calls return the length of the message on successful completion.  If a message is too long to fit in the supplied buffer, excess bytes may be discarded depending on the type of socket the message is received from.
fr: Ces trois appels renvoient la longueur du message s'ils réussissent. Si un message est trop long pour tenir dans le tampon, les octets supplémentaires peuvent être abandonnés suivant le type de socket utilisé.

note: type: Plain text
en: If no messages are available at the socket, the receive calls wait for a message to arrive, unless the socket is nonblocking (see B<fcntl>(2)), in which case the value -1 is returned and the external variable I<errno> is set to B<EAGAIN> or B<EWOULDBLOCK>.  The receive calls normally return any data available, up to the requested amount, rather than waiting for receipt of the full amount requested.
fr: Si aucun message n'est disponible sur la socket, les fonctions de réception se mettent en attente, à moins que la socket soit non bloquante (voir B<fcntl>(2)) auquel cas la valeur -1 est renvoyée, et I<errno> est positionnée à B<EAGAIN> ou B<EWOULDBLOCK>. Les fonctions de réception renvoient normalement les données disponibles sans attendre d'avoir reçu le nombre exact réclamé.

note: type: Plain text
en: An application can used B<select>(2), B<poll>(2), or B<epoll>(7)  to determine when more data arrives on a socket.
fr: Une application peut avoir recours à B<select>(2), B<poll>(2), ou B<epoll>(7) pour savoir si des données supplémentaires sont disponibles dans la socket.

note: type: SS
en: The flags argument
fr: L'argument flags

note: type: Plain text
en: The I<flags> argument is formed by ORing one or more of the following values:
fr: L'argument I<flags> est constitué d'un I<OU> binaire entre une ou plusieurs des valeurs suivantes\ :

note: type: TP
en: B<MSG_CMSG_CLOEXEC> (B<recvmsg>() only; since Linux 2.6.23)
fr: B<MSG_CMSG_CLOEXEC> (B<recvmsg>() uniquement ; depuis Linux 2.6.23)

note: type: Plain text
en: Set the close-on-exec flag for the file descriptor received via a UNIX domain file descriptor using the B<SCM_RIGHTS> operation (described in B<unix>(7)).  This flag is useful for the same reasons as the B<O_CLOEXEC> flag of B<open>(2).
fr: Positionne l'attribut « close-on-exec » pour le descripteur de fichier reçu via un descripteur de fichier de domaine UNIX en utilisant l'opération B<SCM_RIGHTS> (décrite dans B<unix>(7)). Cet attribut est utile pour les mêmes raisons que l'attribut B<O_CLOEXEC> de B<open>(2).

note: type: TP
en: B<MSG_DONTWAIT> (since Linux 2.2)
fr: B<MSG_DONTWAIT> (depuis Linux 2.2)

note: type: Plain text
en: Enables nonblocking operation; if the operation would block, the call fails with the error B<EAGAIN> or B<EWOULDBLOCK> (this can also be enabled using the B<O_NONBLOCK> flag with the B<F_SETFL> B<fcntl>(2)).
fr: Activer les opérations non bloquantes. Si l'opération devait bloquer, l'appel échouera avec l'erreur B<EAGAIN> ou B<EWOULDBLOCK> (on peut aussi activer ce comportement avec l'option B<O_NONBLOCK> de la fonction B<F_SETFL> de B<fcntl>(2)).

note: type: TP
en: B<MSG_ERRQUEUE> (since Linux 2.2)
fr: B<MSG_ERRQUEUE> (depuis Linux 2.2)

note: type: Plain text
en: This flag specifies that queued errors should be received from the socket error queue.  The error is passed in an ancillary message with a type dependent on the protocol (for IPv4 B<IP_RECVERR>).  The user should supply a buffer of sufficient size.  See B<cmsg>(3)  and B<ip>(7)  for more information.  The payload of the original packet that caused the error is passed as normal data via I<msg_iovec>.  The original destination address of the datagram that caused the error is supplied via I<msg_name>.
fr: Cet attribut demande que les erreurs soient reçues depuis la file d'erreur de la socket. Les erreurs sont transmises dans un message annexe dont le type dépend du protocole (B<IP_RECVERR> pour IPv4). Il faut alors fournir un tampon de taille suffisante. Consultez B<cmsg>(3) et B<ip>(7) pour plus de détails. Le contenu du paquet original qui a causé l'erreur est passé en tant que données normales dans I<msg_iovec>. L'adresse de destination originale du datagramme ayant causé l'erreur est fournie dans I<msg_name>.

note: type: Plain text
en: For local errors, no address is passed (this can be checked with the I<cmsg_len> member of the I<cmsghdr>).  For error receives, the B<MSG_ERRQUEUE> is set in the I<msghdr>.  After an error has been passed, the pending socket error is regenerated based on the next queued error and will be passed on the next socket operation.
fr: Pour les erreurs locales, aucune adresse n'est passée (ceci peut être vérifié dans le membre I<cmsg_len> de I<cmsghdr>). À la réception d'une erreur, B<MSG_ERRQUEUE> est placé dans I<msghdr>. Après réception d'une erreur, l'erreur en attente sur la socket est régénérée en fonction de la prochaine erreur dans la file, et sera transmise lors de l'opération suivante sur la socket.

note: type: Plain text
en: The error is supplied in a I<sock_extended_err> structure:
fr: L'erreur est contenue dans une structure I<sock_extended_err>\ :

note: type: Plain text
en: struct sock_extended_err
    {
        uint32_t ee_errno;   /* error number */
        uint8_t  ee_origin;  /* where the error originated */
        uint8_t  ee_type;    /* type */
        uint8_t  ee_code;    /* code */
        uint8_t  ee_pad;     /* padding */
        uint32_t ee_info;    /* additional information */
        uint32_t ee_data;    /* other data */
        /* More data may follow */
    };
fr: struct sock_extended_err
    {
        uint32_t ee_errno;   /* numéro d'erreur */
        uint8_t  ee_origin;  /* origine de l'erreur */
        uint8_t  ee_type;    /* type */
        uint8_t  ee_code;    /* code */
        uint8_t  ee_pad;     /* remplissage */
        uint32_t ee_info;    /* données supplémentaires */
        uint32_t ee_data;    /* autres données */
        /* Des données supplémentaires peuvent suivre */
    };

note: type: Plain text
en: I<ee_errno> contains the I<errno> number of the queued error.  I<ee_origin> is the origin code of where the error originated.  The other fields are protocol-specific.  The macro B<SOCK_EE_OFFENDER> returns a pointer to the address of the network object where the error originated from given a pointer to the ancillary message.  If this address is not known, the I<sa_family> member of the I<sockaddr> contains B<AF_UNSPEC> and the other fields of the I<sockaddr> are undefined.  The payload of the packet that caused the error is passed as normal data.
fr: I<ee_errno> contient le code I<errno> de l'erreur en file. I<ee_origin> est le code d'origine de l'erreur. Les autres champs sont spécifiques au protocole. La macro B<SOCK_EE_OFFENDER> renvoie un pointeur sur l'adresse de l'objet réseau ayant déclenché l'erreur, à partir d'un pointeur sur le message. Si l'adresse n'est pas connue, le membre I<sa_family> de la structure I<sockaddr> contient B<AF_UNSPEC> et les autres champs de la structure I<sockaddr> sont indéfinis. Le contenu du paquet ayant déclenché l'erreur est transmis en données normales.

note: type: Plain text
en: This flag requests receipt of out-of-band data that would not be received in the normal data stream.  Some protocols place expedited data at the head of the normal data queue, and thus this flag cannot be used with such protocols.
fr: Cette option permet la lecture des données hors-bande qui ne seraient autrement pas placées dans le flux de données normales. Certains protocoles placent ces données hors-bande en tête de la file normale, et cette option n'a pas lieu d'être dans ce cas.

note: type: Plain text
en: This flag causes the receive operation to return data from the beginning of the receive queue without removing that data from the queue.  Thus, a subsequent receive call will return the same data.
fr: Cette option permet de lire les données en attente dans la file sans les enlever de cette file. Ainsi une lecture ultérieure renverra à nouveau les mêmes données.

note: type: TP
en: B<MSG_TRUNC> (since Linux 2.2)
fr: B<MSG_TRUNC> (depuis Linux 2.2)

note: type: Plain text
en: For raw (B<AF_PACKET>), Internet datagram (since Linux 2.4.27/2.6.8), netlink (since Linux 2.6.22), and UNIX datagram (since Linux 3.4) sockets: return the real length of the packet or datagram, even when it was longer than the passed buffer.
fr: Pour les socket en mode brut (B<AF_PACKET>), datagramme Internet (depuis Linux 2.4.27/2.6.8), netlink (depuis Linux 2.6.22) et datagramme UNIX (depuis Linux 3.4) : renvoyer la taille réelle du paquet ou datagramme, même quand il est plus grand que le tampon fourni.

note: type: Plain text
en: For use with Internet stream sockets, see B<tcp>(7).
fr: Pour une utilisation avec des sockets en mode flux, consultez B<tcp>(7).

note: type: TP
en: B<MSG_WAITALL> (since Linux 2.2)
fr: B<MSG_WAITALL> (depuis Linux 2.2)

note: type: Plain text
en: This flag requests that the operation block until the full request is satisfied.  However, the call may still return less data than requested if a signal is caught, an error or disconnect occurs, or the next data to be received is of a different type than that returned.
fr: Cette option demande que l'opération de lecture soit bloquée jusqu'à ce que la requête complète soit satisfaite. Toutefois, la lecture peut renvoyer quand même moins de données que prévu si un signal est reçu, ou si une erreur ou une déconnexion se produisent.

note: type: Plain text
en: B<recvfrom>()  places the received message into the buffer I<buf>.  The caller must specify the size of the buffer in I<len>.
fr: B<recvfrom>() enregistre le message reçu dans le tampon I<buf>. Le processus appelant doit préciser la taille de ce tampon dans I<len>.

note: (Note: for datagram sockets in both the UNIX and Internet domains, .I src_addr is filled in. is also filled in for stream sockets in the UNIX domain, but is not filled in for stream sockets in the Internet domain.) [The above notes on AF_UNIX and AF_INET sockets apply as at Kernel 2.4.18. (MTK, 22 J
en: If I<src_addr> is not NULL, and the underlying protocol provides the source address of the message, that source address is placed in the buffer pointed to by I<src_addr>.  In this case, I<addrlen> is a value-result argument.  Before the call, it should be initialized to the size of the buffer associated with I<src_addr>.  Upon return, I<addrlen> is updated to contain the actual size of the source address.  The returned address is truncated if the buffer provided is too small; in this case, I<addrlen> will return a value greater than was supplied to the call.
fr: Si I<src_addr> n'est pas NULL, et si le protocole sous-jacent fournit l'adresse de la source, celle-ci y est insérée dans le tampon sur désigné par I<src_addr>. Dans ce cas, I<addrlen> est un paramètre-résultat. Avant l'appel, il doit recevoir la valeur de la taille du tampon associé à I<src_addr>. En retour, I<addrlen> est mis à jour avec la valeur réelle de l'adresse source. Cette adresse est tronquée si le buffer fourni n'a pas une taille suffisante ; dans ce cas I<addrlen> renvoie un valeur supérieure à celle fournie lors de l'appel.

note: type: Plain text
en: If the caller is not interested in the source address, I<src_addr> should be specified as NULL and I<addrlen> should be specified as 0.
fr: Si le processus appelant n'est pas intéressé par l'adresse de la source, I<src_addr> doit avoir la valeur NULL, et I<addrlen> doit valoir 0.

note: type: Plain text
en: The B<recv>()  call is normally used only on a I<connected> socket (see B<connect>(2)).  It is equivalent to the call:
fr: L'appel B<recv>() est normalement utilisé sur une socket I<connectée> (voir B<connect>(2)). Il est équivalent à l'appel :

note: type: Plain text
en: The B<recvmsg>()  call uses a I<msghdr> structure to minimize the number of directly supplied arguments.  This structure is defined as follows in I<E<lt>sys/socket.hE<gt>>:
fr: L'appel B<recvmsg>() utilise une structure I<msghdr> pour minimiser le nombre de paramètres à fournir directement. Cette structure est définie dans I<E<lt>sys/socket.hE<gt>> comme ceci\ :

note: type: Plain text
en: struct iovec {                    /* Scatter/gather array items */
        void  *iov_base;              /* Starting address */
        size_t iov_len;               /* Number of bytes to transfer */
    };
fr: struct iovec {                    /* dispersion/assemblage
                                         d'éléments de tableaux */
        void *iov_base;               /* Adresse de début */
        size_t iov_len;               /* Nombre d'octets à transférer */
    };

note: type: Plain text
en: struct msghdr {
        void         *msg_name;       /* optional address */
        socklen_t     msg_namelen;    /* size of address */
        struct iovec *msg_iov;        /* scatter/gather array */
        size_t        msg_iovlen;     /* # elements in msg_iov */
        void         *msg_control;    /* ancillary data, see below */
        size_t        msg_controllen; /* ancillary data buffer len */
        int           msg_flags;      /* flags on received message */
    };
fr: struct msghdr {
        void         *msg_name;       /* adresse optionnelle */
        socklen_t     msg_namelen;    /* taille de l'adresse */
        struct iovec *msg_iov;        /* tableau scatter/gather */
        size_t        msg_iovlen;     /* # éléments dans msg_iov */
        void         *msg_control;    /* métadonnées, voir ci\(hydessous */
        size_t        msg_controllen; /* taille du tampon de métadonnées */
        int           msg_flags;      /* attributs du message reçu */
    };

note: type: Plain text
en: Here I<msg_name> and I<msg_namelen> specify the source address if the socket is unconnected; I<msg_name> may be given as a null pointer if no names are desired or required.  The fields I<msg_iov> and I<msg_iovlen> describe scatter-gather locations, as discussed in B<readv>(2).  The field I<msg_control>, which has length I<msg_controllen>, points to a buffer for other protocol control-related messages or miscellaneous ancillary data.  When B<recvmsg>()  is called, I<msg_controllen> should contain the length of the available buffer in I<msg_control>; upon return from a successful call it will contain the length of the control message sequence.
fr: Ici I<msg_name> et I<msg_namelen> spécifient l'adresse d'origine si la socket n'est pas connectée\ ; I<msg_name> peut être un pointeur nul si le nom n'est pas nécessaire. I<msg_iov> et I<msg_iovlen> décrivent les tampons de réception comme décrit dans B<readv>(2). I<msg_control>, de longueur I<msg_controllen>, pointe sur un tampon utilisé pour les autres messages relatifs au protocole, ou à d'autres données annexes. Lorsqu'on invoque B<recvmsg>, I<msg_controllen> doit contenir la longueur disponible dans le tampon I<msg_control>\ ; au retour il contiendra la longueur de la séquence de message de contrôle.

note: type: Plain text
en: The messages are of the form:
fr: Les messages ont la forme

note: type: Plain text
en: struct cmsghdr {
        socklen_t     cmsg_len;     /* data byte count, including hdr */
        int           cmsg_level;   /* originating protocol */
        int           cmsg_type;    /* protocol-specific type */
    /* followed by
        unsigned char cmsg_data[]; */
    };
fr: struct cmsghdr {
        socklen_t     cmsg_len;     /* nombre d'octets de données, y compris l'en-tête */
        int           cmsg_level;   /* protocole d'origine */
        int           cmsg_type;    /* type dépendant du protocole */
    /* suivi de
        unsigned char cmsg_data[]; */
    };

note: type: Plain text
en: Ancillary data should be accessed only by the macros defined in B<cmsg>(3).
fr: Les données de service ne doivent être manipulées qu'avec les macros de B<cmsg>(3).

note: type: Plain text
en: As an example, Linux uses this ancillary data mechanism to pass extended errors, IP options, or file descriptors over UNIX domain sockets.
fr: À titre d'exemple, Linux utilise ce mécanisme pour transmettre des erreurs étendues, des options IP, ou des descripteurs de fichier sur des sockets de domaine UNIX.

note: type: Plain text
en: The I<msg_flags> field in the I<msghdr> is set on return of B<recvmsg>().  It can contain several flags:
fr: Le champ I<msg_flags> du msghdr est rempli au retour de B<recvmsg>(). Il peut contenir plusieurs attributs\ :

note: type: Plain text
en: indicates end-of-record; the data returned completed a record (generally used with sockets of type B<SOCK_SEQPACKET>).
fr: indique une fin d'enregistrement, les données reçues terminent un enregistrement (utilisé généralement avec les sockets du type B<SOCK_SEQPACKET>).

note: type: Plain text
en: indicates that the trailing portion of a datagram was discarded because the datagram was larger than the buffer supplied.
fr: indique que la portion finale du datagramme a été abandonnée car le datagramme était trop long pour le tampon fourni.

note: type: Plain text
en: indicates that some control data were discarded due to lack of space in the buffer for ancillary data.
fr: indique que des données de contrôle ont été abandonnées à cause d'un manque de place dans le tampon de données annexes.

note: type: Plain text
en: is returned to indicate that expedited or out-of-band data were received.
fr: indique que des données hors-bande ont été reçues.

note: type: Plain text
en: indicates that no data was received but an extended error from the socket error queue.
fr: indique qu'aucune donnée n'a été reçue, sauf une erreur étendue depuis la file d'erreurs.

note: type: Plain text
en: These calls return the number of bytes received, or -1 if an error occurred.  In the event of an error, I<errno> is set to indicate the error.
fr: Ces fonctions renvoient le nombre d'octets reçus si elles réussissent, ou -1 si elles échouent. Dans ce dernier cas, I<errno> permettra d'identifier la cause de l'erreur.

note: type: Plain text
en: When a stream socket peer has performed an orderly shutdown, the return value will be 0 (the traditional "end-of-file" return).
fr: Lorsque le partenaire d'une socket de flux se ferme proprement, la valeur renvoyée est 0 (c'est-à-dire la valeur habituellement renvoyée lorsqu'on arrive à la fin d'un fichier).

note: type: Plain text
en: Datagram sockets in various domains (e.g., the UNIX and Internet domains)  permit zero-length datagrams.  When such a datagram is received, the return value is 0.
fr: Les sockets de datagrammes autorisent des datagrammes de longueur nulle dans différents domaines (par exemple, les domaines UNIX et Internet). Lorsque de tels datagrammes sont reçus, la valeur renvoyée est 0.

note: type: Plain text
en: The value 0 may also be returned if the requested number of bytes to receive from a stream socket was 0.
fr: La valeur 0 peut aussi être renvoyée lorsque le nombre d'octets demandé en réception d'une socket de flux est égal à 0.

note: type: Plain text
en: These are some standard errors generated by the socket layer.  Additional errors may be generated and returned from the underlying protocol modules; see their manual pages.
fr: Il y a des erreurs standards déclenchées par le niveau socket, et des erreurs supplémentaires spécifiques aux protocoles. Consultez leurs pages de manuel.

note: Actually EAGAIN on Linux type: Plain text
en: The socket is marked nonblocking and the receive operation would block, or a receive timeout had been set and the timeout expired before data was received.  POSIX.1-2001 allows either error to be returned for this case, and does not require these constants to have the same value, so a portable application should check for both possibilities.
fr: La socket est non bloquante et aucune donnée n'est disponible, ou un délai de timeout a été indiqué, et il a expiré sans que l'on ait reçu quoi que ce soit. POSIX.1-2001 permet de renvoyer l'une ou l'autre des erreurs dans ce cas et n'exige pas que ces constantes aient la même valeur. Une application portable devrait donc tester les deux possibilités.

note: type: Plain text
en: The argument I<sockfd> is an invalid descriptor.
fr: Le paramètre I<sockfd> n'est pas un descripteur correct.

note: type: Plain text
en: A remote host refused to allow the network connection (typically because it is not running the requested service).
fr: Un hôte distant a refusé la connexion réseau (généralement parce qu'il n'offre pas le service demandé).

note: type: Plain text
en: The receive buffer pointer(s) point outside the process's address space.
fr: Un tampon pointe en dehors de l'espace d'adressage accessible.

note: type: Plain text
en: The receive was interrupted by delivery of a signal before any data were available; see B<signal>(7).
fr: Un signal a interrompu la lecture avant que des données soient disponibles ; consultez B<signal>(7).

note: type: Plain text
en: Invalid argument passed.
fr: Un paramètre non valable a été fourni.

note: type: Plain text
en: Could not allocate memory for B<recvmsg>().
fr: Pas assez de mémoire pour B<recvmsg>().

note: type: Plain text
en: The socket is associated with a connection-oriented protocol and has not been connected (see B<connect>(2)  and B<accept>(2)).
fr: La socket est associée à un protocole orienté connexion et n'a pas encore été connectée (consultez B<connect>(2) et B<accept>(2)).

note: type: Plain text
en: The argument I<sockfd> does not refer to a socket.
fr: Le paramètre I<sockfd> ne correspond pas à une socket.

note: type: Plain text
en: 4.4BSD (these function calls first appeared in 4.2BSD), POSIX.1-2001.
fr: BSD\ 4.4 (ces fonctions sont apparues dans BSD\ 4.2), POSIX.1-2001.

note: type: Plain text
en: POSIX.1-2001 describes only the B<MSG_OOB>, B<MSG_PEEK>, and B<MSG_WAITALL> flags.
fr: POSIX.1-2001 décrit seulement les drapeaux B<MSG_OOB>, B<MSG_PEEK>, et B<MSG_WAITALL>.

note: type: Plain text
en: The prototypes given above follow glibc2.  The Single UNIX Specification agrees, except that it has return values of type I<ssize_t> (while 4.x BSD and libc4 and libc5 all have I<int>).  The I<flags> argument is I<int> in 4.x BSD, but I<unsigned int> in libc4 and libc5.  The I<len> argument is I<int> in 4.x BSD, but I<size_t> in libc4 and libc5.  The I<addrlen> argument is I<int\ *> in 4.x BSD, libc4 and libc5.  The present I<socklen_t\ *> was invented by POSIX.  See also B<accept>(2).
fr: Les prototypes fournis concernent la glibc 2. Les Spécifications Single UNIX les définissent, mais le type de retour est I<ssize_t> (alors que BSD\ 4.x, libc4 , et libc5 renvoient un I<int>). L'argument I<flags> est un I<int> dans BSD\ 4.x, mais I<unsigned int> dans libc4 et libc5. L'argument I<len> est un I<int> dans BSD\ 4.x, mais un I<size_t> dans libc4 et libc5. L'argument I<addrlen> est un I<int\ *> dans BSD\ 4.x, libc4 et libc5. Le I<socklen_t\ *> actuel a été inventé par POSIX. Consultez également B<accept>(2).

note: glibc bug raised 12 Mar 2006 http://sourceware.org/bugzilla/show_bug.cgi?id=2448 The problem is an underlying kernel issue: the size of the __kernel_size_t type used to type this field varies across architectures, but socklen_t is always 32 bits. type: Plain text
en: According to POSIX.1-2001, the I<msg_controllen> field of the I<msghdr> structure should be typed as I<socklen_t>, but glibc currently types it as I<size_t>.
fr: Selon POSIX.1-2001, le champ I<msg_controllen> de la structure I<msghdr> devrait être de type I<socklen_t>, mais il a actuellement le type I<size_t> dans la glibc.

note: type: Plain text
en: See B<recvmmsg>(2)  for information about a Linux-specific system call that can be used to receive multiple datagrams in a single call.
fr: Consultez B<recvmmsg>(2) pour plus d'informations au sujet d'un appel système propre à Linux, utilisé pour recevoir des datagrammes multiples avec un unique appel.

note: type: Plain text
en: An example of the use of B<recvfrom>()  is shown in B<getaddrinfo>(3).
fr: Un exemple d'utilisation de B<recvfrom>() se trouve dans la page de manuel de B<getaddrinfo>(3).

note: type: TH
en: 2012-12-24
fr: 24 décembre 2012

note: type: Plain text
en: recvmmsg - receive multiple messages on a socket
fr: recvmmsg - Recevoir plusieurs message sur une socket

note: type: Plain text
en: The B<recvmmsg>()  system call is an extension of B<recvmsg>(2)  that allows the caller to receive multiple messages from a socket using a single system call.  (This has performance benefits for some applications.)  A further extension over B<recvmsg>(2)  is support for a timeout on the receive operation.
fr: L'appel système B<recvmmsg>() est une extension de B<recvmsg>(2) qui permet à l'appelant de recevoir plusieurs messages d'une socket en utilisant un seul appel système. (Cela améliore les performances pour certaines applications.) Une autre propriété de ce cette extension de B<recvmsg>(2) est la gestion d'une temporisation pour l'opération de réception.

note: type: Plain text
en: The I<sockfd> argument is the file descriptor of the socket to receive data from.
fr: Le paramètre I<sockfd> est le descripteur de fichier de la socket émettrice.

note: type: Plain text
en: The I<msgvec> argument is a pointer to an array of I<mmsghdr> structures.  The size of this array is specified in I<vlen>.
fr: L'argument I<msgvec> est un pointeur vers un tableau de structures I<mmsghdr>. La taille de ce tableau est précisée dans I<vlen>.

note: type: Plain text
en: The I<mmsghdr> structure is defined in I<E<lt>sys/socket.hE<gt>> as:
fr: La structure I<mmsghdr> est définie dans I<E<lt>sys/socket.hE<gt>> comme ceci\ :

note: type: Plain text
en: struct mmsghdr {
        struct msghdr msg_hdr;  /* Message header */
        unsigned int  msg_len;  /* Number of received bytes for header */
    };
fr: struct mmsghdr {
        struct msghdr msg_hdr;  /* En-tête du message  */
        unsigned int  msg_len;  /* Nombre d'octets reçus pour l'en-tête */
    };

note: type: Plain text
en: The I<msg_hdr> field is a I<msghdr> structure, as described in B<recvmsg>(2).  The I<msg_len> field is the number of bytes returned for the message in the entry.  This field has the same value as the return value of a single B<recvmsg>(2)  on the header.
fr: Le champ I<msg_hdr> est une structure  I<msghdr>, conformément à B<recvmsg>(2). Le champ I<msg_len> est le nombre d'octets retourné par le message dans l'entrée. Ce champ a la même valeur que la valeur de retour de la simple commande B<recvmsg>(2) sur l'en-tête.

note: type: Plain text
en: The I<flags> argument contains flags ORed together.  The flags are the same as documented for B<recvmsg>(2), with the following addition:
fr: L'argument I<flags> contient le OU binaire de la collection des attributs. Les attributs sont ceux documentés pour B<recvmsg>(2), plus :

note: type: TP
en: B<MSG_WAITFORONE> (since Linux 2.6.34)
fr: B<MSG_WAITFORONE> (depuis Linux 2.6.34)

note: type: Plain text
en: Turns on B<MSG_DONTWAIT> after the first message has been received.
fr: Activer B<MSG_DONTWAIT> après le premier message reçu.

note: type: Plain text
en: The I<timeout> argument points to a I<struct timespec> (see B<clock_gettime>(2))  defining a timeout (seconds plus nanoseconds) for the receive operation.  (This interval will be rounded up to the system clock granularity, and kernel scheduling delays mean that the blocking interval may overrun by a small amount.)  If I<timeout> is NULL, then the operation blocks indefinitely.
fr: L'argument I<timeout> est un pointeur vers une I<struct timespec> (consultez B<clock_gettime>(2)) définissant la temporisation (en secondes et nanosecondes) pour l'opération de réception. (Cet intervalle sera arrondi à la granularité de l'horloge système, et peut être légèrement modifié à cause des délais d'ordonnancement du noyau.) Si I<timeout> est le pointeur nul, l'opération se bloque indéfiniment.

note: type: Plain text
en: A blocking B<recvmmsg>()  call blocks until I<vlen> messages have been received or until the timeout expires.  A nonblocking call reads as many messages as are available (up to the limit specified by I<vlen>)  and returns immediately.
fr: Un appel bloquant B<recvmmsg>() bloque jusqu'à la réception de I<vlsen> messages ou l'expiration de la temporisation. Un appel non bloquant lit autant de messages que disponibles (jusqu'à la limite indiquée par I<vlen>) et retourne immédiatement.

note: type: Plain text
en: On return from B<recvmmsg>(), successive elements of I<msgvec> are updated to contain information about each received message: I<msg_len> contains the size of the received message; the subfields of I<msg_hdr> are updated as described in B<recvmsg>(2).  The return value of the call indicates the number of elements of I<msgvec> that have been updated.
fr: Au retour de B<recvmmsg>(), les éléments successifs de I<msgvec> sont mis à jour pour contenir l'information concernant chaque message reçu : les champs secondaires de I<msg_hdr> sont mis à jour conformément à B<recmsg>(2). La valeur de retour de l'appel indique le nombre d'éléments de I<msgvec> mis à jour.

note: type: Plain text
en: On success, B<recvmmsg>()  returns the number of messages received in I<msgvec>; on error, -1 is returned, and I<errno> is set to indicate the error.
fr: En cas du succès, B<recvmmsg>() retourne le nombre de messages reçus dans I<msgvec> ; Dans le cas contraire, il renvoie -1 et remplit I<errno> avec le code d'erreur.

note: type: Plain text
en: Errors are as for B<recvmsg>(2).  In addition, the following error can occur:
fr: Les erreurs sont les mêmes que pour B<recvmsg>(2), plus l'erreur suivante :

note: type: Plain text
en: I<timeout> is invalid.
fr: I<timeout> n'est pas valable.

note: type: Plain text
en: The B<recvmmsg>()  system call was added in Linux 2.6.33.  Support in glibc was added in version 2.12.
fr: L'appel système B<recvmmsg>() a été ajouté dans Linux 2.6.33. La prise en charge dans la glibc a été ajoutée dans la version 2.12.

note: type: Plain text
en: B<recvmmsg>()  is Linux-specific.
fr: B<recvmmsg>() est spécifique à Linux.

note: type: Plain text
en: The following program uses B<recvmmsg>()  to receive multiple messages on a socket and stores them in multiple buffers.  The call returns if all buffers are filled or if the timeout specified has expired.
fr: Le programme suivant utilise B<recvmmsg>() pour recevoir plusieurs messages sur une socket et les stocker dans plusieurs tampons. L'appel termine si tous les tampons sont remplis ou si le délai indiqué est dépassé.

note: type: Plain text
en: The following snippet periodically generates UDP datagrams containing a random number:
fr: Le morceau de code suivant engendre périodiquement des datagrammes UDP contenant un nombre aléatoire :

note: type: Plain text
en: These datagrams are read by the example application, which can give the following output:
fr: Ces datagrammes sont lus par le programme ci-dessous, qui peut par exemple afficher la sortie suivante :

note: type: Plain text
en: $B< ./a.out>
    5 messages received
    1 11782
    2 11345
    3 304
    4 13514
    5 28421
fr: $B< ./a.out>
    5 messages reçus
    1 11782
    2 11345
    3 304
    4 13514
    5 28421

note: type: Plain text
en:     memset(msgs, 0, sizeof(msgs));
        for (i = 0; i E<lt> VLEN; i++) {
            iovecs[i].iov_base         = bufs[i];
            iovecs[i].iov_len          = BUFSIZE;
            msgs[i].msg_hdr.msg_iov    = &iovecs[i];
            msgs[i].msg_hdr.msg_iovlen = 1;
        }
fr:     memset(msgs, 0, sizeof(msgs));
        for (i = 0; i E<lt> VLEN; i++) {
            iovecs[i].iov_base = bufs[i];
            iovecs[i].iov_len = BUFSIZE;
            msgs[i].msg_hdr.msg_iov = &iovecs[i];
            msgs[i].msg_hdr.msg_iovlen = 1;
        }

note: type: Plain text
en:     retval = recvmmsg(sockfd, msgs, VLEN, 0, &timeout);
        if (retval == -1) {
            perror("recvmmsg()");
            exit(EXIT_FAILURE);
        }
fr:     resultat = recvmmsg(sockfd, msgs, VLEN, 0, &timeout);
        if (resultat == -1) {
            perror("recvmmsg()");
            exit(EXIT_FAILURE);
        }

note: type: Plain text
en:     printf("%d messages received\en", retval);
        for (i = 0; i E<lt> retval; i++) {
            bufs[i][msgs[i].msg_len] = 0;
            printf("%d %s", i+1, bufs[i]);
        }
        exit(EXIT_SUCCESS);
    }
fr:     printf("%d messages reçus\en", resultat);
        for (i = 0; i E<lt> resultat; i++) {
            bufs[i][msgs[i].msg_len] = 0;
            printf("%d %s", i+1, bufs[i]);
        }
        exit(EXIT_SUCCESS);
    }

note: type: TH
en: 2014-01-31
fr: 31 janvier 2014

note: type: Plain text
en: select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - synchronous I/O multiplexing
fr: select, pselect, FD_CLR, FD_ISSET, FD_SET, FD_ZERO - Multiplexage d'entrées-sorties synchrones

note: type: Plain text
en: /* According to POSIX.1-2001 */
fr: /* D'après POSIX.1-2001 */

note: type: Plain text
en: /* According to earlier standards */
fr: /* D'après les standards précédents */

note: type: Plain text
en: Feature Test Macro Requirements for glibc (see B<feature_test_macros>(7)):
fr: Exigences de macros de test de fonctionnalités pour la glibc (consultez B<feature_test_macros>(7)) :

note: type: Plain text
en: B<pselect>(): _POSIX_C_SOURCE\ E<gt>=\ 200112L || _XOPEN_SOURCE\ E<gt>=\ 600
fr: B<pselect>() : _POSIX_C_SOURCE\ E<gt>=\ 200112L || _XOPEN_SOURCE\ E<gt>=\ 600

note: type: Plain text
en: B<select>()  and B<pselect>()  allow a program to monitor multiple file descriptors, waiting until one or more of the file descriptors become "ready" for some class of I/O operation (e.g., input possible).  A file descriptor is considered ready if it is possible to perform the corresponding I/O operation (e.g., B<read>(2))  without blocking.
fr: B<select>() et B<pselect>() permettent à un programme de surveiller plusieurs descripteurs de fichier, en attendant qu'au moins l'un de ces descripteurs soit «\ prêt\ » pour une certaine classe d'opérations d'entrée-sortie. Un descripteur de fichier est considéré comme prêt s'il est possible d'effectuer l'opération correspondante (par exemple B<read>(2)) sans bloquer.

note: type: Plain text
en: The operation of B<select>()  and B<pselect>()  is identical, other than these three differences:
fr: B<select>() et B<pselect>() ont un comportement identique, avec trois différences\ :

note: type: Plain text
en: B<select>()  uses a timeout that is a I<struct timeval> (with seconds and microseconds), while B<pselect>()  uses a I<struct timespec> (with seconds and nanoseconds).
fr: La fonction B<select>() utilise un délai exprimé avec une I<struct timeval> (secondes et microsecondes), alors que B<pselect>() utilise une I<struct timespec> (secondes et nanosecondes).

note: type: Plain text
en: B<select>()  may update the I<timeout> argument to indicate how much time was left.  B<pselect>()  does not change this argument.
fr: La fonction B<select>() peut modifier le paramètre I<timeout> pour indiquer le temps restant. La fonction B<pselect>() ne change pas ce paramètre.

note: type: Plain text
en: B<select>()  has no I<sigmask> argument, and behaves as B<pselect>()  called with NULL I<sigmask>.
fr: La fonction B<select>() n'a pas de paramètre I<sigmask> et se comporte comme B<pselect>() avec une valeur NULL pour I<sigmask>

note: type: Plain text
en: Three independent sets of file descriptors are watched.  Those listed in I<readfds> will be watched to see if characters become available for reading (more precisely, to see if a read will not block; in particular, a file descriptor is also ready on end-of-file), those in I<writefds> will be watched to see if a write will not block, and those in I<exceptfds> will be watched for exceptions.  On exit, the sets are modified in place to indicate which file descriptors actually changed status.  Each of the three file descriptor sets may be specified as NULL if no file descriptors are to be watched for the corresponding class of events.
fr: Il y a trois ensembles indépendants de descripteurs surveillés simultanément. Ceux de l'ensemble I<readfds> seront surveillés pour vérifier si des caractères deviennent disponibles en lecture. Plus précisément, on vérifie si un appel système de lecture ne bloquera pas \(em en particulier un descripteur en fin de fichier sera considéré comme prêt. Les descripteurs de l'ensemble I<writefds> seront surveillés pour vérifier si une écriture ne bloquera pas. Ceux de I<exceptfds> seront surveillés pour l'occurrence de conditions exceptionnelles. En sortie, les ensembles sont modifiés pour indiquer les descripteurs qui ont changé d'état. Chacun des trois ensemble de descripteurs peut être NULL si aucun descripteur de fichier ne doit être surveillé pour cette classe d'événements.

note: type: Plain text
en: Four macros are provided to manipulate the sets.  B<FD_ZERO>()  clears a set.  B<FD_SET>()  and B<FD_CLR>()  respectively add and remove a given file descriptor from a set.  B<FD_ISSET>()  tests to see if a file descriptor is part of the set; this is useful after B<select>()  returns.
fr: Quatre macros sont disponibles pour la manipulation des ensembles. B<FD_ZERO>() efface un ensemble. B<FD_SET>() ajoute et B<FD_CLR>() supprime un descripteur dans un ensemble. B<FD_ISSET>() vérifie si un descripteur est contenu dans un ensemble, principalement utile après le retour de B<select>().

note: type: Plain text
en: I<nfds> is the highest-numbered file descriptor in any of the three sets, plus 1.
fr: I<nfds> est le numéro du plus grand descripteur des 3 ensembles, plus 1.

note: type: Plain text
en: The I<timeout> argument specifies the interval that B<select>()  should block waiting for a file descriptor to become ready.  The call will block until either:
fr: L'argument I<timeout> précise la durée de l'intervalle pendant lequel B<select>() restera bloqué dans l'attente d'un descripteur de fichier disponible. L'appel restera bloqué jusqu'à ce que l'un des événements suivants se produise :

note: type: Plain text
en: a file descriptor becomes ready;
fr: un descripteur de fichier est prêt;

note: type: Plain text
en: the call is interrupted by a signal handler; or
fr: l'appel système a été interrompu par l'arrivée d'un signal avant qu'une connexion valide ne survienne ; ou bien

note: type: Plain text
en: the timeout expires.
fr: le délai maximal expire.

note: type: Plain text
en: Note that the I<timeout> interval will be rounded up to the system clock granularity, and kernel scheduling delays mean that the blocking interval may overrun by a small amount.  If both fields of the I<timeval> structure are zero, then B<select>()  returns immediately.  (This is useful for polling.)  If I<timeout> is NULL (no timeout), B<select>()  can block indefinitely.
fr: Notez que I<timeout> est arrondi selon la granularité de l'horloge du système, et un retard d'ordonnancement du noyau peut entraîner un léger dépassement de la durée de blocage. Si les deux champs de la structure I<timeval> sont nuls alors B<select>() retourne immédiatement. (Ce qui sert pour des surveillances en polling). Si le I<timeout> est NULL (aucune limite), B<select>() peut bloquer indéfiniment

note: type: Plain text
en: I<sigmask> is a pointer to a signal mask (see B<sigprocmask>(2)); if it is not NULL, then B<pselect>()  first replaces the current signal mask by the one pointed to by I<sigmask>, then does the "select" function, and then restores the original signal mask.
fr: I<sigmask> est un pointeur sur un masque de signaux (consultez B<sigprocmask>(2)). S'il n'est pas NULL, alors B<pselect>() remplace d'abord le masque de signaux en cours par celui indiqué dans I<sigmask>, puis invoque la fonction «\ select\ », et enfin restaure le masque de signaux à nouveau.

note: type: Plain text
en: Other than the difference in the precision of the I<timeout> argument, the following B<pselect>()  call:
fr: Mise à part la différence de précision de l'argument I<timeout>, l'appel B<pselect>() suivant\ :

note: type: Plain text
en: is equivalent to I<atomically> executing the following calls:
fr: est équivalent à exécuter de façon I<atomique> les appels suivants\ :

note: type: Plain text
en: The reason that B<pselect>()  is needed is that if one wants to wait for either a signal or for a file descriptor to become ready, then an atomic test is needed to prevent race conditions.  (Suppose the signal handler sets a global flag and returns.  Then a test of this global flag followed by a call of B<select>()  could hang indefinitely if the signal arrived just after the test but just before the call.  By contrast, B<pselect>()  allows one to first block signals, handle the signals that have come in, then call B<pselect>()  with the desired I<sigmask>, avoiding the race.)
fr: L'idée derrière B<pselect>() est que pour l'attente d'un événement, que ce soit un signal ou une condition sur un descripteur, un test atomique est nécessaire pour éviter les situations de concurrence. (Supposons que le gestionnaire de signaux active un drapeau global et revienne. Alors un test de ce drapeau, suivi d'un appel B<select>() peut bloquer indéfiniment si le signal arrive juste après le test mais avant l'appel. À l'inverse, B<pselect>() permet de bloquer le signal d'abord, traiter les signaux déjà reçus, puis invoquer B<pselect>() avec le I<sigmask>, désiré, en évitant la situation de blocage.)

note: type: SS
en: The timeout
fr: Délai maximal

note: type: Plain text
en: The time structures involved are defined in I<E<lt>sys/time.hE<gt>> and look like
fr: Les structures temporelles concernées sont définies dans I<E<lt>sys/time.hE<gt>> comme ceci\ :

note: type: Plain text
en: struct timeval {
        long    tv_sec;         /* seconds */
        long    tv_usec;        /* microseconds */
    };
fr: struct timeval {
        long    tv_sec;         /* secondes      */
        long    tv_usec;        /* microsecondes */
    };

note: type: Plain text
en: and
fr: et

note: type: Plain text
en: struct timespec {
        long    tv_sec;         /* seconds */
        long    tv_nsec;        /* nanoseconds */
    };
fr: struct timespec {
        long    tv_sec;         /* secondes     */
        long    tv_nsec;        /* nanosecondes */
    };

note: type: Plain text
en: (However, see below on the POSIX.1-2001 versions.)
fr: (Toutefois, voir plus loin les versions POSIX.1-2001.)

note: type: Plain text
en: Some code calls B<select>()  with all three sets empty, I<nfds> zero, and a non-NULL I<timeout> as a fairly portable way to sleep with subsecond precision.
fr: Certaines applications appellent B<select>() avec trois ensembles de descripteurs vides, I<nfds> nul, et un délai I<timeout> non nul, afin d'endormir, de manière portable, le processus avec une précision plus fine que la seconde.

note: .PP - it is rumored that: On BSD, when a timeout occurs, the file descriptor bits are not changed. - it is certainly true that: Linux follows SUSv2 and sets the bit masks to zero upon a timeout. type: Plain text
en: On Linux, B<select>()  modifies I<timeout> to reflect the amount of time not slept; most other implementations do not do this.  (POSIX.1-2001 permits either behavior.)  This causes problems both when Linux code which reads I<timeout> is ported to other operating systems, and when code is ported to Linux that reuses a I<struct timeval> for multiple B<select>()s in a loop without reinitializing it.  Consider I<timeout> to be undefined after B<select>()  returns.
fr: Sous Linux, la fonction B<select>() modifie I<timeout> pour indiquer le temps restant mais la plupart des autres implémentations ne le font pas (POSIX.1-2001 autorise les deux comportements). Ceci pose des problèmes à la fois pour porter sur d'autres systèmes du code développé sous Linux qui utilise cette valeur de I<timeout> modifiée, et pour porter sous Linux du code qui réutilise plusieurs fois la I<struct timeval> sans la réinitialiser. La meilleure attitude à adopter est de considérer I<timeout> comme indéfini après le retour de B<select>().

note: type: Plain text
en: On success, B<select>()  and B<pselect>()  return the number of file descriptors contained in the three returned descriptor sets (that is, the total number of bits that are set in I<readfds>, I<writefds>, I<exceptfds>)  which may be zero if the timeout expires before anything interesting happens.  On error, -1 is returned, and I<errno> is set to indicate the error; the file descriptor sets are unmodified, and I<timeout> becomes undefined.
fr: En cas de réussite B<select>() et B<pselect>() renvoient le nombre de descripteurs dans les trois ensembles de descripteurs renvoyés (c'est-à-dire le nombre total de bits à 1 dans I<readfds>, I<writefds> et I<exceptfds>) qui peut être nul si le délai d’expiration a été atteint avant que quoi que ce soit d'intéressant ne se produise. Elles renvoient -1 en cas d’échec, auquel cas I<errno> contient le code d'erreur ; les ensembles de descripteurs de fichier ne sont pas modifiés et I<timeout> n’est plus défini.

note: type: Plain text
en: An invalid file descriptor was given in one of the sets.  (Perhaps a file descriptor that was already closed, or one on which an error has occurred.)
fr: Un descripteur de fichier invalide était dans l'un des ensembles. (Peut-être un descripteur déjà fermé, ou sur lequel une erreur s'est produite.)

note: type: Plain text
en: A signal was caught; see B<signal>(7).
fr: Un signal a été intercepté ; consultez B<signal>(7).

note: type: Plain text
en: I<nfds> is negative or the value contained within I<timeout> is invalid.
fr: I<nfds> est négatif ou la valeur contenue dans I<timeout> est invalide.

note: type: Plain text
en: unable to allocate memory for internal tables.
fr: Pas assez de mémoire pour le noyau.

note: type: Plain text
en: B<pselect>()  was added to Linux in kernel 2.6.16.  Prior to this, B<pselect>()  was emulated in glibc (but see BUGS).
fr: B<pselect>() a été ajouté à Linux dans le noyau 2.6.16. Précédemment, B<pselect>() était émulé dans la glibc (mais voir la section BOGUES).

note: type: Plain text
en: B<select>()  conforms to POSIX.1-2001 and 4.4BSD (B<select>()  first appeared in 4.2BSD).  Generally portable to/from non-BSD systems supporting clones of the BSD socket layer (including System V variants).  However, note that the System V variant typically sets the timeout variable before exit, but the BSD variant does not.
fr: B<select>() est conforme à POSIX.1-2001 et BSD\ 4.4 (la fonction B<select>() est apparue dans BSD\ 4.2). Généralement portable depuis ou vers des systèmes non-BSD supportant des clones de la couche sockets BSD (y compris les variantes du System V). Néanmoins, sachez que les variantes du System V définissent une variable de timeout avant le retour alors que les variantes BSD ne le font pas.

note: type: Plain text
en: B<pselect>()  is defined in POSIX.1g, and in POSIX.1-2001.
fr: B<pselect>() est défini dans POSIX.1g, et dans POSIX.1-2001.

note: type: Plain text
en: An I<fd_set> is a fixed size buffer.  Executing B<FD_CLR>()  or B<FD_SET>()  with a value of I<fd> that is negative or is equal to or larger than B<FD_SETSIZE> will result in undefined behavior.  Moreover, POSIX requires I<fd> to be a valid file descriptor.
fr: Un ensemble I<fd_set> est un tampon de taille fixe. Exécuter B<FD_CLR>() ou B<FD_SET>() avec I<fd> négatif ou supérieur ou égal à B<FD_SETSIZE> résultera en un comportement indéfini. Plus encore, POSIX demande que I<fd> soit un descripteur de fichier valide.

note: type: Plain text
en: Concerning the types involved, the classical situation is that the two fields of a I<timeval> structure are typed as I<long> (as shown above), and the structure is defined in I<E<lt>sys/time.hE<gt>>.  The POSIX.1-2001 situation is
fr: En ce qui concerne les types impliqués, la situation classique est que les deux champs de la structure I<timeval> soient de type «\ I<long>\ » (comme ci-dessus), et que la structure soit définie dans I<E<lt>sys/time.hE<gt>>. La situation avec POSIX.1-2001 est

note: type: Plain text
en: struct timeval {
        time_t         tv_sec;     /* seconds */
        suseconds_t    tv_usec;    /* microseconds */
    };
fr: struct timeval {
        time_t         tv_sec;     /* secondes */
        suseconds_t    tv_usec;    /* microsecondes */
    };

note: type: Plain text
en: where the structure is defined in I<E<lt>sys/select.hE<gt>> and the data types I<time_t> and I<suseconds_t> are defined in I<E<lt>sys/types.hE<gt>>.
fr: avec la structure définie dans I<E<lt>sys/select.hE<gt>> et les types de données I<time_t> et I<suseconds_t> définis dans I<E<lt>sys/types.hE<gt>>.

note: type: Plain text
en: Concerning prototypes, the classical situation is that one should include I<E<lt>time.hE<gt>> for B<select>().  The POSIX.1-2001 situation is that one should include I<E<lt>sys/select.hE<gt>> for B<select>()  and B<pselect>().
fr: Concernant les prototypes, on demande classiquement l'inclusion de I<E<lt>time.hE<gt>> pour B<select>(). Avec POSIX.1-2001, on préfère inclure I<E<lt>sys/select.hE<gt>> pour B<select>() et B<pselect>().

note: type: Plain text
en: Libc4 and libc5 do not have a I<E<lt>sys/select.hE<gt>> header; under glibc 2.0 and later this header exists.  Under glibc 2.0 it unconditionally gives the wrong prototype for B<pselect>().  Under glibc 2.1 to 2.2.1 it gives B<pselect>()  when B<_GNU_SOURCE> is defined.  Since glibc 2.2.2 the requirements are as shown in the SYNOPSIS.
fr: Les bibliothèques libc4 et libc5 n'avaient pas d'en-tête I<E<lt>sys/select.hE<gt>>, mais avec les glibc 2.0 et suivantes le fichier existe. Pour la glibc 2.0, le prototype de B<pselect>() est toujours erroné. Avec la glibc 2.1 à 2.2.1 le prototype de B<pselect>() est fourni si la constante B<_GNU_SOURCE> est définie avant l'inclusion. Depuis la glibc 2.2.2, les exigences sont celles indiquées dans le SYNOPSIS.

note: type: SS
en: Multithreaded applications
fr: Programmes multithreadés

note: type: Plain text
en: If a file descriptor being monitored by B<select>()  is closed in another thread, the result is unspecified.  On some UNIX systems, B<select>()  unblocks and returns, with an indication that the file descriptor is ready (a subsequent I/O operation will likely fail with an error, unless another the file descriptor reopened between the time B<select>()  returned and the I/O operations was performed).  On Linux (and some other systems), closing the file descriptor in another thread has no effect on B<select>().  In summary, any application that relies on a particular behavior in this scenario must be considered buggy.
fr: Si un descripteur de fichier surveillé par B<select>() est fermé dans un autre thread, le résultat est indéterminé. Sur certains systèmes UNIX, B<select>() débloque et termine, avec une indication que le descripteur de fichier est prêt (une opération entrée/sortie ultérieur risque d'échouer avec une erreur, sauf si le descripteur de fichier a été réouvert entre le moment où B<select>() termine et l'exécution des opérations entrée/sortie). Sur Linux (et d'autres systèmes), la fermeture du descripteur de fichier dans un autre thread n'a aucun effet sur B<select>(). En résumé, toute application qui s'appuie sur un comportement particulier dans ce scénario doit être considérée comme boguée.

note: type: SS
en: Linux notes
fr: Notes sur Linux

note: type: Plain text
en: The B<pselect>()  interface described in this page is implemented by glibc.  The underlying Linux system call is named B<pselect6>().  This system call has somewhat different behavior from the glibc wrapper function.
fr: L'interface B<pselect>() décrite dans cette page est implémentée par la glibc. L'appel système Linux sous-jacent est appelé B<pselect6>(). Cet appel système a un comportement quelque peu différent de la fonction d'enrobage de la glibc.

note: type: Plain text
en: The Linux B<pselect6>()  system call modifies its I<timeout> argument.  However, the glibc wrapper function hides this behavior by using a local variable for the timeout argument that is passed to the system call.  Thus, the glibc B<pselect>()  function does not modify its I<timeout> argument; this is the behavior required by POSIX.1-2001.
fr: L'appel système B<pselect6>() de Linux modifie son argument I<timeout>. Cependant, la fonction d'enrobage de la glibc cache ce comportement en utilisant une variable locale pour l'argument I<timeout> qui est passé à l'appel système. Par conséquent, la fonction B<pselect>() de glibc ne modifie pas son paramètre I<timeout>, ce qui est le comportement prescrit par POSIX.1-2001.

note: type: Plain text
en: The final argument of the B<pselect6>()  system call is not a I<sigset_t\ *> pointer, but is instead a structure of the form:
fr: Le dernier argument de l'appel système B<pselect6>() n'est pas un pointeur I<sigset_t\ *>, mais une structure de la forme suivante :

note: type: Plain text
en: struct {
        const sigset_t *ss;     /* Pointer to signal set */
        size_t          ss_len; /* Size (in bytes) of object pointed
                                   to by 'ss' */
    };
fr: struct {
        const sigset_t *ss;     /* pointeur vers l'ensemble de signaux */
        size_t          ss_len; /* taille (en octet) de l'objet pointé
                                   par 'ss' */
    };

note: type: Plain text
en: This allows the system call to obtain both a pointer to the signal set and its size, while allowing for the fact that most architectures support a maximum of 6 arguments to a system call.
fr: Cela permet à l'appel système d'obtenir à la fois le pointeur à l'ensemble de signaux et sa taille, tout en permettant à la plupart des architectures de ne prendre en charge qu'un maximum de 6 arguments pour un appel système.

note: type: Plain text
en: Glibc 2.0 provided a version of B<pselect>()  that did not take a I<sigmask> argument.
fr: Glibc 2.0 fournissait une version de B<pselect>() qui n'avait pas d'argument I<sigmask>.

note: type: Plain text
en: Starting with version 2.1, glibc provided an emulation of B<pselect>()  that was implemented using B<sigprocmask>(2)  and B<select>().  This implementation remained vulnerable to the very race condition that B<pselect>()  was designed to prevent.  Modern versions of glibc use the (race-free)  B<pselect>()  system call on kernels where it is provided.
fr: À partir de la version 2.1, la glibc fournissait une émulation de B<pselect>() implémentée avec B<sigprocmask>(2) et B<select>(). Cette implémentation était vulnérable à la condition de concurrence que B<pselect>() était conçu pour éviter. Les versions récentes de la glibc utilisent l'appel système B<pselect>() (sans risque de concurrence) si le noyau le fournit.

note: type: Plain text
en: On systems that lack B<pselect>(), reliable (and more portable) signal trapping can be achieved using the self-pipe trick.  In this technique, a signal handler writes a byte to a pipe whose other end is monitored by B<select>()  in the main program.  (To avoid possibly blocking when writing to a pipe that may be full or reading from a pipe that may be empty, nonblocking I/O is used when reading from and writing to the pipe.)
fr: Sur les systèmes sans B<pselect>, une gestion plus sûre (et plus portable) des signaux peut être obtenue en utilisant un tube : un gestionnaire de signal écrit un octet dans un tube dont B<select>() dans le programme principal surveille l'autre extrémité. (Pour éviter la possibilité de blocage lors de l'écriture dans un tube peut-être plein, ou la lecture dans un tube peut-être vide, des entrées et sorties non bloquantes sont utilisées pour la lecture et l'écriture dans le tube.)

note: Stevens discusses a case where accept can block after select returns successfully because of an intervening RST from the client. Maybe the kernel should have returned EIO in such a situation? type: Plain text
en: Under Linux, B<select>()  may report a socket file descriptor as "ready for reading", while nevertheless a subsequent read blocks.  This could for example happen when data has arrived but upon examination has wrong checksum and is discarded.  There may be other circumstances in which a file descriptor is spuriously reported as ready.  Thus it may be safer to use B<O_NONBLOCK> on sockets that should not block.
fr: Sous Linux, B<select>() peut signaler un descripteur de fichier socket comme «\ prêt à lire\ » alors qu'une lecture suivante bloque. Cela peut, par exemple, survenir lorsque des données sont arrivées mais, après vérification, ont une mauvaise somme de contrôle et sont rejetées. Cela peut également arriver dans d'autres circonstances. Aussi, il est plus sûr d'utiliser B<O_NONBLOCK> sur des sockets qui ne devraient pas bloquer.

note: type: Plain text
en: On Linux, B<select>()  also modifies I<timeout> if the call is interrupted by a signal handler (i.e., the B<EINTR> error return).  This is not permitted by POSIX.1-2001.  The Linux B<pselect>()  system call has the same behavior, but the glibc wrapper hides this behavior by internally copying the I<timeout> to a local variable and passing that variable to the system call.
fr: Sous Linux, B<select>() modifie également I<timeout> si l'appel est interrompu par un gestionnaire de signaux (code d'erreur B<EINTR>). Ceci est interdit par POSIX.1-2001. L'appel système B<pselect>() de Linux se comporte de la même façon, mais la glibc cache cette particularité en copiant I<timeout> vers une variable locale, et en passant cette variable à l'appel système.

note: type: Plain text
en:     /* Watch stdin (fd 0) to see when it has input. */
        FD_ZERO(&rfds);
        FD_SET(0, &rfds);
fr:     /* Surveiller stdin (fd 0) en attente d'entrées */
        FD_ZERO(&rfds);
        FD_SET(0, &rfds);

note: type: Plain text
en:     /* Wait up to five seconds. */
        tv.tv_sec = 5;
        tv.tv_usec = 0;
fr:     /* Attends jusqu'à 5 secondes. */
        tv.tv_sec = 5;
        tv.tv_usec = 0;

note: type: Plain text
en:     retval = select(1, &rfds, NULL, NULL, &tv);
        /* Don't rely on the value of tv now! */
fr:     retval = select(1, &rfds, NULL, NULL, &tv);
        /* Considérer tv comme indéfini maintenant ! */

note: type: Plain text
en:     if (retval == -1)
            perror("select()");
        else if (retval)
            printf("Data is available now.\en");
            /* FD_ISSET(0, &rfds) will be true. */
        else
            printf("No data within five seconds.\en");
fr:     if (retval == -1)
            perror("select()");
        else if (retval)
            printf("Des données sont disponibles maintenant\(rsn");
            /* FD_ISSET(0, &rfds) est alors vrai. */
        else
            printf("Aucune donnée durant les cinq secondes.\(rsn");

note: type: Plain text
en: For a tutorial with discussion and examples, see B<select_tut>(2).
fr: Pour un tutoriel avec des exemples, consultez B<select_tut>(2).

note: type: TH
en: 2013-12-30
fr: 30 décembre 2013

note: type: Plain text
en: B<select>()  (or B<pselect>())  is used to efficiently monitor multiple file descriptors, to see if any of them is, or becomes, "ready"; that is, to see whether I/O becomes possible, or an "exceptional condition" has occurred on any of the descriptors.
fr: B<select>() (ou B<pselect>()) est utilisé pour superviser efficacement plusieurs descripteurs de fichiers pour vérifier si l'un d'entre eux est ou devient « prêt » ; c'est-à-dire savoir si des entrées-sorties deviennent possibles ou si une « condition exceptionnelle » est survenue sur l'un des descripteurs.

note: type: Plain text
en: Its principal arguments are three "sets" of file descriptors: I<readfds>, I<writefds>, and I<exceptfds>.  Each set is declared as type I<fd_set>, and its contents can be manipulated with the macros B<FD_CLR>(), B<FD_ISSET>(), B<FD_SET>(), and B<FD_ZERO>().  A newly declared set should first be cleared using B<FD_ZERO>().  B<select>()  modifies the contents of the sets according to the rules described below; after calling B<select>()  you can test if a file descriptor is still present in a set with the B<FD_ISSET>()  macro.  B<FD_ISSET>()  returns nonzero if a specified file descriptor is present in a set and zero if it is not.  B<FD_CLR>()  removes a file descriptor from a set.
fr: Ses paramètres principaux sont trois « ensembles » de descripteurs de fichiers : I<readfds>, I<writefds> et I<exceptfds>. Chaque ensemble est de type I<fd_set>, et son contenu peut être manipulé avec les macros B<FD_CLR>(), B<FD_ISSET>(), B<FD_SET>(), et B<FD_ZERO>(). Un ensemble nouvellement déclaré doit d'abord être effacé en utilisant B<FD_ZERO>(). B<select>() modifie le contenu de ces ensembles selon les règles ci-dessous. Après un appel à B<select>(), vous pouvez vérifier si un descripteur de fichier est toujours présent dans l'ensemble à l'aide de la macro B<FD_ISSET>(). B<FD_ISSET>() renvoie une valeur non nulle si un descripteur de fichier indiqué est présent dans un ensemble et zéro s'il ne l'est pas. B<FD_CLR>() retire un descripteur de fichier d'un ensemble.

note: type: Plain text
en: This set is watched to see if data is available for reading from any of its file descriptors.  After B<select>()  has returned, I<readfds> will be cleared of all file descriptors except for those that are immediately available for reading.
fr: Cet ensemble est examiné afin de déterminer si des données sont disponibles en lecture à partir d'un de ses descripteurs de fichier. Suite à un appel à B<select>(), I<readfds> ne contient plus aucun de ses descripteurs de fichiers à l'exception de ceux qui sont immédiatement disponibles pour une lecture.

note: type: Plain text
en: This set is watched to see if there is space to write data to any of its file descriptors.  After B<select>()  has returned, I<writefds> will be cleared of all file descriptors except for those that are immediately available for writing.
fr: Cet ensemble est examiné afin de déterminer s'il y a de l'espace afin d'écrire des données dans un de ses descripteurs de fichier. Suite à un appel à B<select>(), I<writefds> ne contient plus aucun de ses descripteurs de fichiers à l'exception de ceux qui sont immédiatement disponibles pour une écriture.

note: type: Plain text
en: This set is watched for "exceptional conditions".  In practice, only one such exceptional condition is common: the availability of I<out-of-band> (OOB) data for reading from a TCP socket.  See B<recv>(2), B<send>(2), and B<tcp>(7)  for more details about OOB data.  (One other less common case where B<select>(2)  indicates an exceptional condition occurs with pseudoterminals in packet mode; see B<tty_ioctl>(4).)  After B<select>()  has returned, I<exceptfds> will be cleared of all file descriptors except for those for which an exceptional condition has occurred.
fr: Cet ensemble est examiné pour des « conditions exceptionnelles ». En pratique, seule une condition exceptionnelle est courante : la disponibilité de données I<hors-bande> (OOB : Out Of Band) en lecture sur une socket TCP. Consultez B<recv>(2), B<send>(2) et B<tcp>(7) pour plus de détails sur les données hors bande. Un autre cas moins courant dans lequel B<select>(2) indique une condition exceptionnelle survient avec des pseudoterminaux en mode paquet ; consultez B<tty_ioctl>(4).) Suite à un appel à B<select>(), I<exceptfds> ne contient plus aucun de ses descripteurs de fichier à l'exception de ceux pour lesquels une condition exceptionnelle est survenue.

note: type: Plain text
en: This is an integer one more than the maximum of any file descriptor in any of the sets.  In other words, while adding file descriptors to each of the sets, you must calculate the maximum integer value of all of them, then increment this value by one, and then pass this as I<nfds>.
fr: Il s'agit d'un entier valant un de plus que n'importe lequel des descripteurs de fichier de tous les ensembles. En d'autres termes, lorsque vous ajoutez des descripteurs de fichier à chacun des ensembles, vous devez déterminer la valeur entière maximale de tous ces derniers, puis ajouter un à cette valeur, et la passer comme paramètre I<nfds>.

note: type: Plain text
en: This is the longest time B<select>()  may wait before returning, even if nothing interesting happened.  If this value is passed as NULL, then B<select>()  blocks indefinitely waiting for a file descriptor to become ready.  I<utimeout> can be set to zero seconds, which causes B<select>()  to return immediately, with information about the readiness of file descriptors at the time of the call.  The structure I<struct timeval> is defined as:
fr: Il s'agit du temps le plus long que B<select>() pourrait attendre avant de rendre la main, même si rien d'intéressant n'est arrivé. Si cette valeur est positionnée à NULL, alors, B<select>() bloque indéfiniment dans l'attente qu'un descripteur de fichier devienne prêt. I<utimeout> peut être positionné à zéro seconde, ce qui provoque le retour immédiat de B<select>(), en indiquant quels descripteurs de fichiers étaient prêts au moment de l'appel. La structure I<struct timeval> est définie comme :

note: type: Plain text
en: struct timeval {
        time_t tv_sec;    /* seconds */
        long tv_usec;     /* microseconds */
    };
fr: struct timeval {
        time_t tv_sec;    /* secondes */
        long tv_usec;     /* microsecondes */
    };

note: type: Plain text
en: This argument for B<pselect>()  has the same meaning as I<utimeout>, but I<struct timespec> has nanosecond precision as follows:
fr: Ce paramètre de B<pselect>() a la même signification que I<utimeout>, mais I<struct timespec> a une précision à la nanoseconde comme explicité ci-dessous\ :

note: type: Plain text
en: struct timespec {
        long tv_sec;    /* seconds */
        long tv_nsec;   /* nanoseconds */
    };
fr: struct timespec {
        long tv_sec;    /* secondes */
        long tv_nsec;   /* nanosecondes */
    };

note: type: Plain text
en: This argument holds a set of signals that the kernel should unblock (i.e., remove from the signal mask of the calling thread), while the caller is blocked inside the B<pselect>()  call (see B<sigaddset>(3)  and B<sigprocmask>(2)).  It may be NULL, in which case the call does not modify the signal mask on entry and exit to the function.  In this case, B<pselect>()  will then behave just like B<select>().
fr: Cet argument renferme un ensemble de signaux que le noyau doit débloquer (c'est-à-dire supprimer du masque de signaux du thread appelant) pendant que l'appelant est bloqué par B<pselect>() (consultez B<sigaddset>(3) et B<sigprocmask>(2)). Il peut valoir NULL et, dans ce cas, il ne modifie pas l'ensemble des signaux non bloqués à l'entrée et la sortie de la fonction. Dans ce cas, B<pselect>() se comporte alors de façon identique à B<select>().

note: type: SS
en: Combining signal and data events
fr: Combinaison d'événements de signaux et de données

note: type: Plain text
en: B<pselect>()  is useful if you are waiting for a signal as well as for file descriptor(s) to become ready for I/O.  Programs that receive signals normally use the signal handler only to raise a global flag.  The global flag will indicate that the event must be processed in the main loop of the program.  A signal will cause the B<select>()  (or B<pselect>())  call to return with I<errno> set to B<EINTR>.  This behavior is essential so that signals can be processed in the main loop of the program, otherwise B<select>()  would block indefinitely.  Now, somewhere in the main loop will be a conditional to check the global flag.  So we must ask: what if a signal arrives after the conditional, but before the B<select>()  call? The answer is that B<select>()  would block indefinitely, even though an event is actually pending.  This race condition is solved by the B<pselect>()  call.  This call can be used to set the signal mask to a set of signals that are only to be received within the B<pselect>()  call.  For instance, let us say that the event in question was the exit of a child process.  Before the start of the main loop, we would block B<SIGCHLD> using B<sigprocmask>(2).  Our B<pselect>()  call would enable B<SIGCHLD> by using an empty signal mask.  Our program would look like:
fr: B<pselect>() est utile si vous attendez un signal ou qu'un descripteur de fichier deviennent prêt pour des entrées-sorties. Les programmes qui reçoivent des signaux utilisent généralement le gestionnaire de signal uniquement pour lever un drapeau global. Le drapeau global indique que l'événement doit être traité dans la boucle principale du programme. Un signal provoque l'arrêt de l'appel B<select>() (ou B<pselect>()) avec I<errno> positionnée à B<EINTR>. Ce comportement est essentiel afin que les signaux puissent être traités dans la boucle principale du programme, sinon B<select>() bloquerait indéfiniment. Ceci étant, la boucle principale implante quelque part une condition vérifiant le drapeau global, et l'on doit donc se demander\ : que se passe-t-il si un signal est levé après la condition mais avant l'appel à B<select>()\ ? La réponse est que B<select>() bloquerait indéfiniment, même si un signal est en fait en attente. Cette "race condition" est résolue par l'appel B<pselect>(). Cet appel peut être utilisé afin de définir le masque des signaux qui sont censés être reçus que durant l'appel à B<pselect>(). Par exemple, disons que l'événement en question est la fin d'un processus fils. Avant le démarrage de la boucle principale, nous bloquerions B<SIGCHLD> en utilisant B<sigprocmask>(2). Notre appel B<pselect>() débloquerait B<SIGCHLD> en utilisant le masque de signaux vide. Le programme ressemblerait à ceci\ :

note: type: Plain text
en:     for (;;) {          /* main loop */
            /* Initialize readfds, writefds, and exceptfds
               before the pselect() call. (Code omitted.) */
fr:     for (;;) {          /* main loop */
            /* Initialiser readfds, writefds et exceptfds
               avant l'appel à pselect(). (Code omis.) */

note: type: Plain text
en:         r = pselect(nfds, &readfds, &writefds, &exceptfds,
                        NULL, &empty_mask);
            if (r == -1 && errno != EINTR) {
                /* Handle error */
            }
fr:         r = pselect(nfds, &readfds, &writefds, &exceptfds,
                        NULL, &empty_mask);
            if (r == -1 && errno != EINTR) {
                /* Gérer les erreurs */
            }

note: type: Plain text
en:             /* Handle signalled event here; e.g., wait() for all
                   terminated children. (Code omitted.) */
            }
fr:             /* Gérer les événements signalés ici; e.g., wait() pour
                   que tous les fils se terminent. (Code omis.) */
            }

note: type: Plain text
en:         /* main body of program */
        }
    }
fr:         /* corps principal du programme */
        }
    }

note: type: SS
en: Practical
fr: Pratique

note: type: Plain text
en: So what is the point of B<select>()? Can't I just read and write to my descriptors whenever I want? The point of B<select>()  is that it watches multiple descriptors at the same time and properly puts the process to sleep if there is no activity.  UNIX programmers often find themselves in a position where they have to handle I/O from more than one file descriptor where the data flow may be intermittent.  If you were to merely create a sequence of B<read>(2)  and B<write>(2)  calls, you would find that one of your calls may block waiting for data from/to a file descriptor, while another file descriptor is unused though ready for I/O.  B<select>()  efficiently copes with this situation.
fr: Quelle est donc la finalité de B<select>()\ ? Ne peut on pas simplement lire et écrire dans les descripteurs chaque fois qu'on le souhaite\ ? L'objet de B<select>() est de surveiller de multiples descripteurs simultanément et d'endormir proprement le processus s'il n'y a pas d'activité. Les programmeurs UNIX se retrouvent souvent dans une situation dans laquelle ils doivent gérer des entrées-sorties provenant de plus d'un descripteur de fichier et dans laquelle le flux de données est intermittent. Si vous deviez créer une séquence d'appels B<read>(2) et B<write>(2), vous vous retrouveriez potentiellement bloqué sur un de vos appels attendant pour lire ou écrire des données à partir/vers un descripteur de fichier, alors qu'un autre descripteur de fichier est inutilisé bien qu'il soit prêt pour des entrées-sorties. B<select>() gère efficacement cette situation.

note: type: SS
en: Select law
fr: Règles de select

note: type: Plain text
en: Many people who try to use B<select>()  come across behavior that is difficult to understand and produces nonportable or borderline results.  For instance, the above program is carefully written not to block at any point, even though it does not set its file descriptors to nonblocking mode.  It is easy to introduce subtle errors that will remove the advantage of using B<select>(), so here is a list of essentials to watch for when using B<select>().
fr: De nombreuses personnes qui essaient d'utiliser B<select>() obtiennent un comportement difficile à comprendre et produisent des résultats non portables ou des effets de bord. Par exemple, le programme ci-dessus est écrit avec précaution afin de ne bloquer nulle part, même s'il ne positionne pas ses descripteurs de fichier en mode non bloquant.Il est facile d'introduire des erreurs subtiles qui annuleraient l'avantage de l'utilisation de B<select>(), aussi, voici une liste de points essentiels à contrôler lors de l'utilisation de B<select>().

note: type: Plain text
en: You should always try to use B<select>()  without a timeout.  Your program should have nothing to do if there is no data available.  Code that depends on timeouts is not usually portable and is difficult to debug.
fr: Vous devriez toujours essayer d'utiliser B<select>() sans timeout. Votre programme ne devrait rien avoir à faire s'il n'y a pas de données disponibles. Le code dépendant de timeouts n'est en général pas portable et difficile à déboguer.

note: type: Plain text
en: The value I<nfds> must be properly calculated for efficiency as explained above.
fr: La valeur I<nfds> doit être calculée correctement pour des raisons d'efficacité comme expliqué plus haut.

note: type: Plain text
en: No file descriptor must be added to any set if you do not intend to check its result after the B<select>()  call, and respond appropriately.  See next rule.
fr: Aucun descripteur de fichier ne doit être ajouté à un quelconque ensemble si vous ne projetez pas de vérifier son état après un appel à B<select>(), et de réagir de façon adéquate. Voir la règle suivante.

note: type: Plain text
en: After B<select>()  returns, all file descriptors in all sets should be checked to see if they are ready.
fr: Après le retour de B<select>(), tous les descripteurs de fichier dans tous les ensembles devraient être testés pour savoir s'ils sont prêts.

note: type: Plain text
en: The functions B<read>(2), B<recv>(2), B<write>(2), and B<send>(2)  do I<not> necessarily read/write the full amount of data that you have requested.  If they do read/write the full amount, it's because you have a low traffic load and a fast stream.  This is not always going to be the case.  You should cope with the case of your functions managing to send or receive only a single byte.
fr: Les fonctions B<read>(2), B<recv>(2), B<write>(2) et B<send>(2) ne lisent ou n'écrivent I<pas> forcément la quantité totale de données spécifiée. Si elles lisent/écrivent la quantité totale, c'est parce que vous avez une faible charge de trafic et un flux rapide. Ce n'est pas toujours le cas. Vous devriez gérer le cas où vos fonctions traitent seulement l'envoi ou la réception d'un unique octet.

note: type: Plain text
en: Never read/write only in single bytes at a time unless you are really sure that you have a small amount of data to process.  It is extremely inefficient not to read/write as much data as you can buffer each time.  The buffers in the example below are 1024 bytes although they could easily be made larger.
fr: Ne lisez/n'écrivez jamais seulement quelques octets à la fois à moins que vous ne soyez absolument sûr de n'avoir qu'une faible quantité de données à traiter. Il est parfaitement inefficace de ne pas lire/écrire autant de données que vous pouvez en stocker à chaque fois. Les tampons de l'exemple ci-dessous font 1024 octets bien qu'ils aient facilement pu être rendus plus grands.

note: Nonetheless, you should still cope with these errors for completeness. type: Plain text
en: The functions B<read>(2), B<recv>(2), B<write>(2), and B<send>(2)  as well as the B<select>()  call can return -1 with I<errno> set to B<EINTR>, or with I<errno> set to B<EAGAIN> (B<EWOULDBLOCK>).  These results must be properly managed (not done properly above).  If your program is not going to receive any signals, then it is unlikely you will get B<EINTR>.  If your program does not set nonblocking I/O, you will not get B<EAGAIN>.
fr: Les fonctions B<read>(2), B<recv>(2), B<write>(2) et B<send>(2) tout comme l'appel B<select>() peuvent renvoyer -1 avec I<errno> positionné à B<EINTR> ou B<EAGAIN> (B<EWOULDBLOCK>) ce qui ne relève pas d'une erreur. Ces résultats doivent être correctement gérés (cela n'est pas fait correctement ci-dessus). Si votre programme n'est pas censé recevoir de signal, alors, il est hautement improbable que vous obteniez B<EINTR>. Si votre programme n'a pas configuré les entrées-sorties en mode non bloquant, vous n'obtiendrez pas de B<EAGAIN>.

note: type: Plain text
en: Never call B<read>(2), B<recv>(2), B<write>(2), or B<send>(2)  with a buffer length of zero.
fr: N'appelez jamais B<read>(2), B<recv>(2), B<write>(2) ou B<send>(2) avec un tampon de taille nulle.

note: type: Plain text
en: If the functions B<read>(2), B<recv>(2), B<write>(2), and B<send>(2)  fail with errors other than those listed in B<7.>, or one of the input functions returns 0, indicating end of file, then you should I<not> pass that descriptor to B<select>()  again.  In the example below, I close the descriptor immediately, and then set it to -1 to prevent it being included in a set.
fr: Si l'une des fonctions B<read>(2), B<recv>(2), B<write>(2) et B<send>(2) échoue avec une erreur autre que celles indiquées en B<7.>, ou si l'une des fonctions d'entrée renvoie 0, indiquant une fin de fichier, vous I<ne> devriez I<pas> utiliser ce descripteur à nouveau pour un appel à B<select>(). Dans l'exemple ci-dessous, le descripteur est immédiatement fermé et ensuite est positionné à -1 afin qu'il ne soit pas inclus dans un ensemble.

note: type: Plain text
en: The timeout value must be initialized with each new call to B<select>(), since some operating systems modify the structure.  B<pselect>()  however does not modify its timeout structure.
fr: La valeur de timeout doit être initialisée à chaque nouvel appel à B<select>(), puisque des systèmes d'exploitation modifient la structure. Cependant, B<pselect>() ne modifie pas sa structure de timeout.

note: "I have heard" does not fill me with confidence, and doesn't belong in a man page, so I've commented this point out. .TP 11. I have heard that the Windows socket layer does not cope with OOB data properly. It also does not cope with .BR select () calls when no file descriptors are set at all. Having
en: Since B<select>()  modifies its file descriptor sets, if the call is being used in a loop, then the sets must be reinitialized before each call.
fr: Comme B<select>() modifie ses ensembles de descripteurs de fichiers, si l'appel est effectué dans une boucle alors les ensembles doivent être réinitialisés avant chaque appel.

note: type: SS
en: Usleep emulation
fr: Émulation de usleep

note: type: Plain text
en: On systems that do not have a B<usleep>(3)  function, you can call B<select>()  with a finite timeout and no file descriptors as follows:
fr: Sur les systèmes qui ne possèdent pas la fonction B<usleep>(3), vous pouvez appeler B<select>() avec un timeout à valeur finie et sans descripteur de fichier de la façon suivante\ :

note: type: Plain text
en:     struct timeval tv;
        tv.tv_sec = 0;
        tv.tv_usec = 200000;  /* 0.2 seconds */
        select(0, NULL, NULL, NULL, &tv);
fr:     struct timeval tv;
        tv.tv_sec = 0;
        tv.tv_usec = 200000;  /* 0.2 secondes */
        select(0, NULL, NULL, NULL, &tv);

note: type: Plain text
en: This is guaranteed to work only on UNIX systems, however.
fr: Le fonctionnement n'est cependant garanti que sur les systèmes UNIX.

note: type: Plain text
en: On success, B<select>()  returns the total number of file descriptors still present in the file descriptor sets.
fr: En cas de succès, B<select>() renvoie le nombre total de descripteurs de fichiers encore présents dans les ensembles de descripteurs de fichier.

note: type: Plain text
en: If B<select>()  timed out, then the return value will be zero.  The file descriptors set should be all empty (but may not be on some systems).
fr: En cas de timeout échu, alors les descripteurs de fichier devraient tous être vides (mais peuvent ne pas l'être sur certains systèmes). Par contre, la valeur renvoyée est zéro.

note: type: Plain text
en: A return value of -1 indicates an error, with I<errno> being set appropriately.  In the case of an error, the contents of the returned sets and the I<struct timeout> contents are undefined and should not be used.  B<pselect>()  however never modifies I<ntimeout>.
fr: Une valeur de retour égale à -1 indique une erreur, I<errno> est alors positionné de façon adéquate. En cas d'erreur, le contenu des ensembles renvoyés et le contenu de la structure de I<timeout> sont indéfinis et ne devraient pas être exploités. B<pselect>() ne modifie cependant jamais I<ntimeout>.

note: type: Plain text
en: Generally speaking, all operating systems that support sockets also support B<select>().  B<select>()  can be used to solve many problems in a portable and efficient way that naive programmers try to solve in a more complicated manner using threads, forking, IPCs, signals, memory sharing, and so on.
fr: De façon générale, tous les systèmes d'exploitation qui gèrent les sockets proposent également B<select>(). B<select>() peut être utilisé pour résoudre de façon portable et efficace de nombreux problèmes que des programmeurs naïfs essaient de résoudre avec des threads, des forks, des IPC, des signaux, des mémoires partagées et d'autres méthodes peu élégantes.

note: type: Plain text
en: The B<poll>(2)  system call has the same functionality as B<select>(), and is somewhat more efficient when monitoring sparse file descriptor sets.  It is nowadays widely available, but historically was less portable than B<select>().
fr: L'appel système B<poll>(2) a les mêmes fonctionnalités que B<select>(), tout en étant légèrement plus efficace quand il doit surveiller des ensembles de descripteurs creux. Il est disponible sur la plupart des systèmes de nos jours, mais était historiquement moins portable que B<select>().

note: type: Plain text
en: The Linux-specific B<epoll>(7)  API provides an interface that is more efficient than B<select>(2)  and B<poll>(2)  when monitoring large numbers of file descriptors.
fr: L'API B<epoll>(7) spécifique à Linux fournit une interface plus efficace que B<select>(2) et B<poll>(2) lorsque l'on surveille un grand nombre de descripteurs de fichier.

note: type: Plain text
en: Here is an example that better demonstrates the true utility of B<select>().  The listing below is a TCP forwarding program that forwards from one TCP port to another.
fr: Voici un exemple qui montre mieux l'utilité réelle de B<select>(). Le code ci-dessous consiste en un programme de «\ TCP forwarding\ » qui redirige un port TCP vers un autre.

note: type: Plain text
en:     if (argc != 4) {
            fprintf(stderr, "Usage\en\etfwd E<lt>listen-portE<gt> "
                     "E<lt>forward-to-portE<gt> E<lt>forward-to-ip-addressE<gt>\en");
            exit(EXIT_FAILURE);
        }
fr:     if (argc != 4) {
            fprintf(stderr, "Utilisation\en\etfwd E<lt>listen-portE<gt> "
                     "E<lt>forward-to-portE<gt> E<lt>forward-to-ip-addressE<gt>\en");
            exit(EXIT_FAILURE);
        }

note: type: Plain text
en:             memset(&client_address, 0, l = sizeof(client_address));
                r = accept(h, (struct sockaddr *) &client_address, &l);
                if (r == -1) {
                    perror("accept()");
                } else {
                    SHUT_FD1;
                    SHUT_FD2;
                    buf1_avail = buf1_written = 0;
                    buf2_avail = buf2_written = 0;
                    fd1 = r;
                    fd2 = connect_socket(forward_port, argv[3]);
                    if (fd2 == -1)
                        SHUT_FD1;
                    else
                        printf("connect from %s\en",
                                inet_ntoa(client_address.sin_addr));
                }
            }
fr:             memset(&client_address, 0, l = sizeof(client_address));
                r = accept(h, (struct sockaddr *) &client_address, &l);
                if (r == -1) {
                    perror("accept()");
                } else {
                    SHUT_FD1;
                    SHUT_FD2;
                    buf1_avail = buf1_written = 0;
                    buf2_avail = buf2_written = 0;
                    fd1 = r;
                    fd2 = connect_socket(forward_port, argv[3]);
                    if (fd2 == -1)
                        SHUT_FD1;
                    else
                        printf("connexion de %s\en",
                                inet_ntoa(client_address.sin_addr));
                }
            }

note: type: Plain text
en:         /* NB: read oob data before normal reads */
fr:         /* NB : lecture des données hors bande avant les lectures normales */

note: type: Plain text
en:         /* check if write data has caught read data */
fr:         /* Vérifie si l'écriture de données a rattrapé la lecture de données */

note: type: Plain text
en:         /* one side has closed the connection, keep
               writing to the other side until empty */
fr:         /* une extrémité a fermé la connexion, continue
               d'écrire vers l'autre extrémité jusqu'à ce
               que ce soit vide */

note: type: Plain text
en: The above program properly forwards most kinds of TCP connections including OOB signal data transmitted by B<telnet> servers.  It handles the tricky problem of having data flow in both directions simultaneously.  You might think it more efficient to use a B<fork>(2)  call and devote a thread to each stream.  This becomes more tricky than you might suspect.  Another idea is to set nonblocking I/O using B<fcntl>(2).  This also has its problems because you end up using inefficient timeouts.
fr: Le programme ci-dessus redirige correctement la plupart des types de connexions TCP y compris les signaux de données hors bande OOB transmis par les serveurs B<telnet>. Il gère le problème épineux des flux de données bidirectionnels simultanés. Vous pourriez penser qu'il est plus efficace d'utiliser un appel B<fork>(2) et de dédier une tâche à chaque flux. Cela devient alors plus délicat que vous ne l'imaginez. Une autre idée est de configurer les entrées-sorties comme non bloquantes en utilisant B<fcntl>(2). Cela pose également problème puisque ça vous force à utiliser des timeouts inefficaces.

note: type: Plain text
en: The program does not handle more than one simultaneous connection at a time, although it could easily be extended to do this with a linked list of buffers\(emone for each connection.  At the moment, new connections cause the current connection to be dropped.
fr: Le programme ne gère pas plus d'une connexion à la fois bien qu'il soit aisément extensible à une telle fonctionnalité en utilisant une liste chaînée de tampons \(em un pour chaque connexion. Pour l'instant, de nouvelles connexions provoquent l'abandon de la connexion courante.

note: type: TH
en: 2013-12-12
fr: 12 décembre 2013

note: type: Plain text
en: send, sendto, sendmsg - send a message on a socket
fr: send, sendto, sendmsg - Envoyer un message sur une socket

note: type: Plain text
en: The system calls B<send>(), B<sendto>(), and B<sendmsg>()  are used to transmit a message to another socket.
fr: Les appels système B<send>(), B<sendto>() et B<sendmsg>() permettent de transmettre un message à destination d'une autre socket.

note: type: Plain text
en: The B<send>()  call may be used only when the socket is in a I<connected> state (so that the intended recipient is known).  The only difference between B<send>()  and B<write>(2)  is the presence of I<flags>.  With a zero I<flags> argument, B<send>()  is equivalent to B<write>(2).  Also, the following call
fr: L'appel B<send>() ne peut être utilisé qu'avec les sockets I<connectées> (ainsi, le destinataire visé est connu). La seule différence entre B<send>() et B<write>(2) est la présence de I<flags>. Si I<flags> est nul, B<send>() est équivalent à B<write>(2). De plus l'appel suivant :

note: type: Plain text
en: is equivalent to
fr: est équivalent à\ :

note: type: Plain text
en: The argument I<sockfd> is the file descriptor of the sending socket.
fr: Le paramètre I<sockfd> est le descripteur de fichier de la socket émettrice.

note: type: Plain text
en: If B<sendto>()  is used on a connection-mode (B<SOCK_STREAM>, B<SOCK_SEQPACKET>)  socket, the arguments I<dest_addr> and I<addrlen> are ignored (and the error B<EISCONN> may be returned when they are not NULL and 0), and the error B<ENOTCONN> is returned when the socket was not actually connected.  Otherwise, the address of the target is given by I<dest_addr> with I<addrlen> specifying its size.  For B<sendmsg>(), the address of the target is given by I<msg.msg_name>, with I<msg.msg_namelen> specifying its size.
fr: Si B<sendto>() est utilisée sur une socket en mode connexion (B<SOCK_STREAM>, B<SOCK_SEQPACKET>), les paramètres I<dest_addr> et I<addrlen> sont ignorés (et l'erreur B<EISCONN> peut être retournée s'il n'y pas NULL ou 0), et l'erreur B<ENOTCONN> est retournée lorsque la socket n'est pas vraiment connectée. Autrement, l'adresse de la cible est fournie par I<dest_addr>, I<addrlen> spécifiant sa taille. Pour B<sendmsg>(), l'adresse de la cible est fournie par I<msg.msg_name>, I<msg.msg_namelen> spécifiant sa taille.

note: type: Plain text
en: For B<send>()  and B<sendto>(), the message is found in I<buf> and has length I<len>.  For B<sendmsg>(), the message is pointed to by the elements of the array I<msg.msg_iov>.  The B<sendmsg>()  call also allows sending ancillary data (also known as control information).
fr: Pour B<send>() et B<sendto>(), le message se trouve dans I<buf> et a pour longueur I<len>. Pour B<sendmsg>(), le message est pointé par les éléments du tableau I<msg.msg_iov>. L'appel B<sendmsg>() permet également l'envoi de métadonnées (également appelées données de contrôle).

note: type: Plain text
en: If the message is too long to pass atomically through the underlying protocol, the error B<EMSGSIZE> is returned, and the message is not transmitted.
fr: Si le message est trop long pour être transmis intégralement par le protocole sous\(hyjacent, l'erreur B<EMSGSIZE> sera déclenchée et rien ne sera émis.

note: type: Plain text
en: No indication of failure to deliver is implicit in a B<send>().  Locally detected errors are indicated by a return value of -1.
fr: Aucune indication d'échec de distribution n'est fournie par B<send>(). Seules les erreurs locales sont détectées, et indiquées par une valeur de retour -1.

note: type: Plain text
en: When the message does not fit into the send buffer of the socket, B<send>()  normally blocks, unless the socket has been placed in nonblocking I/O mode.  In nonblocking mode it would fail with the error B<EAGAIN> or B<EWOULDBLOCK> in this case.  The B<select>(2)  call may be used to determine when it is possible to send more data.
fr: Si la socket ne dispose pas de la place suffisante pour le message, alors B<send>() va bloquer, à moins que la socket ait été configurée en mode d'entrées-sorties non bloquantes auquel cas elle échouera avec l'erreur B<EAGAIN> ou B<EWOULDBLOCK>. On peut utiliser l'appel système B<select>(2) pour vérifier s'il est possible d'émettre des données.

note: FIXME ? document MSG_PROXY (which went away in 2.3.15) type: Plain text
en: The I<flags> argument is the bitwise OR of zero or more of the following flags.
fr: Le paramètre I<flags> est un OU bit à bit de zéro ou plusieurs des options suivantes\ :

note: type: TP
en: B<MSG_CONFIRM> (since Linux 2.3.15)
fr: B<MSG_CONFIRM> (depuis Linux 2.3.15)

note: type: Plain text
en: Tell the link layer that forward progress happened: you got a successful reply from the other side.  If the link layer doesn't get this it will regularly reprobe the neighbor (e.g., via a unicast ARP).  Only valid on B<SOCK_DGRAM> and B<SOCK_RAW> sockets and currently implemented only for IPv4 and IPv6.  See B<arp>(7)  for details.
fr: Indiquer à la couche liaison qu'une réponse correcte a été reçue du correspondant. Si la couche de liaison n'a pas cette confirmation, elle va réinterroger régulièrement le voisinage (par exemple avec un ARP unicast). Seulement valide pour les sockets B<SOCK_DGRAM> et B<SOCK_RAW> et uniquement implémenté pour IPv4 et IPv6. Consultez B<arp>(7) pour plus de détails.

note: type: Plain text
en: Don't use a gateway to send out the packet, send to hosts only on directly connected networks.  This is usually used only by diagnostic or routing programs.  This is defined only for protocol families that route; packet sockets don't.
fr: Ne pas utiliser de passerelle pour transmettre le paquet, n'envoyer de données que vers les hôtes sur des réseaux directement connectés. Ceci n'est normalement employé que par les programmes de diagnostic ou de routage. Cette option n'est définie que pour les familles de protocoles employant le routage, pas les sockets par paquets.

note: type: Plain text
en: Enables nonblocking operation; if the operation would block, B<EAGAIN> or B<EWOULDBLOCK> is returned (this can also be enabled using the B<O_NONBLOCK> flag with the B<F_SETFL> B<fcntl>(2)).
fr: Activer les opérations non bloquantes. Si l'opération devait bloquer, B<EAGAIN> ou B<EWOULDBLOCK> sera renvoyé (on peut aussi activer ce comportement avec l'option B<O_NONBLOCK> de la fonction B<F_SETFL> de B<fcntl>(2)).

note: type: TP
en: B<MSG_EOR> (since Linux 2.2)
fr: B<MSG_EOR> (depuis Linux 2.2)

note: type: Plain text
en: Terminates a record (when this notion is supported, as for sockets of type B<SOCK_SEQPACKET>).
fr: Termine un enregistrement (lorsque cette notion est supportée, comme pour les sockets de type B<SOCK_SEQPACKET>).

note: type: TP
en: B<MSG_MORE> (since Linux 2.4.4)
fr: B<MSG_MORE> (depuis Linux 2.4.4)

note: type: Plain text
en: The caller has more data to send.  This flag is used with TCP sockets to obtain the same effect as the B<TCP_CORK> socket option (see B<tcp>(7)), with the difference that this flag can be set on a per-call basis.
fr: L'appelant a d'autres données à envoyer. Cet attribut est utilisé avec les sockets TCP pour obtenir le même comportement qu'avec l'option socket B<TCP_CORK> (consultez B<tcp>(7)), à la différence que cet attribut peut être positionné par appel.

note: type: Plain text
en: Since Linux 2.6, this flag is also supported for UDP sockets, and informs the kernel to package all of the data sent in calls with this flag set into a single datagram which is transmitted only when a call is performed that does not specify this flag.  (See also the B<UDP_CORK> socket option described in B<udp>(7).)
fr: Depuis Linux 2.6, cet attribut est également géré pour les sockets UDP et demande au noyau d'empaqueter toutes les données envoyées dans des appels avec cet attribut positionné dans un seul datagramme qui ne sera transmis que quand un appel sera effectué sans cet attribut. Consultez aussi la description de l'option de socket B<UDP_CORK> dans B<udp>(7).

note: type: TP
en: B<MSG_NOSIGNAL> (since Linux 2.2)
fr: B<MSG_NOSIGNAL> (depuis Linux 2.2)

note: type: Plain text
en: Requests not to send B<SIGPIPE> on errors on stream oriented sockets when the other end breaks the connection.  The B<EPIPE> error is still returned.
fr: Demande de ne pas envoyer de signal B<SIGPIPE> d'erreur sur les sockets connectées lorsque le correspondant coupe la connexion. L'erreur B<EPIPE> est toutefois renvoyée.

note: type: Plain text
en: Sends I<out-of-band> data on sockets that support this notion (e.g., of type B<SOCK_STREAM>); the underlying protocol must also support I<out-of-band> data.
fr: est utilisée pour émettre des données I<hors\(hybande> sur une socket qui l'autorise (par exemple de type B<SOCK_STREAM>). Le protocole sous\(hyjacent doit également autoriser l'émission de données I<hors\(hybande>.

note: type: Plain text
en: The definition of the I<msghdr> structure follows.  See B<recv>(2)  and below for an exact description of its fields.
fr: La définition de la structure I<msghdr> se trouve ci-dessous. Consultez B<recv>(2) pour une description exacte de ses champs.

note: Still to be documented: Send file descriptors and user credentials using the msg_control* fields. The flags returned in msg_flags. type: Plain text
en: You may send control information using the I<msg_control> and I<msg_controllen> members.  The maximum control buffer length the kernel can process is limited per socket by the value in I</proc/sys/net/core/optmem_max>; see B<socket>(7).
fr: On peut transmettre des informations de service en employant les membres I<msg_control> et I<msg_controllen>. La longueur maximale du tampon de service que le noyau peut gérer est limité par socket par la valeur de I</proc/sys/net/core/optmem_max>. Consultez B<socket>(7).

note: type: Plain text
en: On success, these calls return the number of bytes sent.  On error, -1 is returned, and I<errno> is set appropriately.
fr: En cas d'envoi réussi, ces fonctions renvoient le nombre d'octets envoyés. En cas d'erreur, -1 est renvoyé, et I<errno> contient le code d'erreur.

note: type: Plain text
en: These are some standard errors generated by the socket layer.  Additional errors may be generated and returned from the underlying protocol modules; see their respective manual pages.
fr: Voici les erreurs standards engendrées par la couche socket. Des erreurs supplémentaires peuvent être déclenchées par les protocoles sous-jacents. Consultez leurs pages de manuel respectives.

note: type: Plain text
en: (For UNIX domain sockets, which are identified by pathname)  Write permission is denied on the destination socket file, or search permission is denied for one of the directories the path prefix.  (See B<path_resolution>(7).)
fr: (Pour les sockets de domaine UNIX qui sont identifiées par un nom de chemin) La permission d'écriture est refusée sur le fichier socket de destination ou la permission de parcours est refusée pour un des répertoires du chemin (consultez B<path_resolution>(7)).

note: type: Plain text
en: (For UDP sockets) An attempt was made to send to a network/broadcast address as though it was a unicast address.
fr: (Pour les sockets UDP) L'envoi à une adresse réseau ou de diffusion a été tenté, alors qu'il s'agissait d'une adresse unicast.

note: Actually EAGAIN on Linux type: Plain text
en: The socket is marked nonblocking and the requested operation would block.  POSIX.1-2001 allows either error to be returned for this case, and does not require these constants to have the same value, so a portable application should check for both possibilities.
fr: La socket est non bloquante et l'opération demandée devrait être bloquante. POSIX.1-2001 permet de renvoyer l'une ou l'autre des erreurs dans ce cas et n'exige pas que ces constantes aient la même valeur. Une application portable devrait donc tester les deux possibilités.

note: type: Plain text
en: An invalid descriptor was specified.
fr: Descripteur de socket invalide.

note: type: Plain text
en: Connection reset by peer.
fr: Connexion réinitialisée par le correspondant.

note: type: Plain text
en: The socket is not connection-mode, and no peer address is set.
fr: La socket n'est pas en mode connexion et aucune adresse de correspondant n'a été positionnée.

note: type: Plain text
en: An invalid user space address was specified for an argument.
fr: Un paramètre pointe en dehors de l'espace d'adressage accessible.

note: type: Plain text
en: A signal occurred before any data was transmitted; see B<signal>(7).
fr: Un signal a été reçu avant que la moindre donnée n'ait été transmise ; voir B<signal>(7).

note: type: Plain text
en: The connection-mode socket was connected already but a recipient was specified.  (Now either this error is returned, or the recipient specification is ignored.)
fr: La socket en mode connexion est déjà connectée mais un destinataire a été spécifié. (Maintenant, soit cette erreur est retournée, soit la spécification du destinataire est ignorée.)

note: (e.g., SOCK_DGRAM ) type: Plain text
en: The socket type requires that message be sent atomically, and the size of the message to be sent made this impossible.
fr: Le type de socket nécessite une émission intégrale du message mais la taille de celui-ci ne le permet pas.

note: type: Plain text
en: The output queue for a network interface was full.  This generally indicates that the interface has stopped sending, but may be caused by transient congestion.  (Normally, this does not occur in Linux.  Packets are just silently dropped when a device queue overflows.)
fr: La file d'émission de l'interface réseau est pleine. Ceci indique généralement une panne de l'interface réseau, mais peut également être dû à un engorgement passager. Ceci ne doit pas se produire sous Linux, les paquets sont silencieusement éliminés.

note: type: Plain text
en: No memory available.
fr: Pas assez de mémoire pour le noyau.

note: type: Plain text
en: The socket is not connected, and no target has been given.
fr: La socket n'est pas connectée et aucune cible n'a été fournie.

note: type: Plain text
en: Some bit in the I<flags> argument is inappropriate for the socket type.
fr: Au moins un bit de l'argument I<flags> n'est pas approprié pour le type de socket.

note: type: Plain text
en: The local end has been shut down on a connection oriented socket.  In this case, the process will also receive a B<SIGPIPE> unless B<MSG_NOSIGNAL> is set.
fr: L'écriture a été terminée du côté local sur une socket orientée connexion. Dans ce cas, le processus recevra également un signal B<SIGPIPE> sauf s'il a activé l'option B<MSG_NOSIGNAL>.

note: type: Plain text
en: 4.4BSD, SVr4, POSIX.1-2001.  These function calls appeared in 4.2BSD.
fr: BSD\ 4.4, SVr4, POSIX.1-2001. Ces appels système sont apparus dans BSD\ 4.2.

note: type: Plain text
en: POSIX.1-2001 describes only the B<MSG_OOB> and B<MSG_EOR> flags.  POSIX.1-2008 adds a specification of B<MSG_NOSIGNAL>.  The B<MSG_CONFIRM> flag is a Linux extension.
fr: POSIX.1-2001 décrit seulement les drapeaux B<MSG_OOB> et B<MSG_EOR>. POSIX.1-2008 ajoute la spécification de B<MSG_NOSIGNAL>. Le drapeau B<MSG_CONFIRM> est une extension Linux.

note: type: Plain text
en: The prototypes given above follow the Single UNIX Specification, as glibc2 also does; the I<flags> argument was I<int> in 4.x BSD, but I<unsigned int> in libc4 and libc5; the I<len> argument was I<int> in 4.x BSD and libc4, but I<size_t> in libc5; the I<addrlen> argument was I<int> in 4.x BSD and libc4 and libc5.  See also B<accept>(2).
fr: Les prototypes fournis plus haut suivent les Spécifications Single UNIX, tout comme glibc2. L'argument I<flags> était un I<int> dans BSD\ 4.x, mais I<unsigned int> dans libc4 et libc5. L'argument I<len> était un I<int> dans BSD\ 4.x et libc4, mais un I<size_t> dans libc5; Le paramètre I<addrlen> était un I<int> dans BSD\ 4.x, libc4 et libc5. Consultez aussi les notes accompagnant la page B<accept>(2).

note: type: Plain text
en: See B<sendmmsg>(2)  for information about a Linux-specific system call that can be used to transmit multiple datagrams in a single call.
fr: Consultez B<sendmmsg(2)> pour plus d'informations au sujet d'un appel système propre à Linux, utilisé pour transmettre des datagrammes multiples avec un unique appel.

note: type: Plain text
en: Linux may return B<EPIPE> instead of B<ENOTCONN>.
fr: Linux peut retourner B<EPIPE> au lieu de B<ENOTCONN>.

note: type: Plain text
en: An example of the use of B<sendto>()  is shown in B<getaddrinfo>(3).
fr: Un exemple d'utilisation de B<sendto>() se trouve dans la page de manuel de B<getaddrinfo>(3).

note: type: TH
en: 2012-12-16
fr: 16 décembre 2012

note: type: Plain text
en: sendmmsg - send multiple messages on a socket
fr: sendmmsg - Envoyer plusieurs message sur une socket

note: See commit 228e548e602061b08ee8e8966f567c12aa079682 type: Plain text
en: The B<sendmmsg>()  system call is an extension of B<sendmsg>(2)  that allows the caller to transmit multiple messages on a socket using a single system call.  (This has performance benefits for some applications.)
fr: L'appel système B<sendmmsg>() est une extension de B<sendmsg>(2) qui permet à l'appelant de transmettre plusieurs messages sur une socket en utilisant un seul appel système. (Cela améliore les performances pour certaines applications.)

note: type: Plain text
en: The I<sockfd> argument is the file descriptor of the socket on which data is to be transmitted.
fr: Le paramètre I<sockfd> est le descripteur de fichier de la socket destinataire.

note: type: Plain text
en: struct mmsghdr {
        struct msghdr msg_hdr;  /* Message header */
        unsigned int  msg_len;  /* Number of bytes transmitted */
    };
fr: struct mmsghdr {
        struct msghdr msg_hdr;  /* En-tête du message  */
        unsigned int  msg_len;  /* Nombre d'octets transmis */
    };

note: type: Plain text
en: The I<msg_hdr> field is a I<msghdr> structure, as described in B<sendmsg>(2).  The I<msg_len> field is used to return the number of bytes sent from the message in I<msg_hdr> (i.e., the same as the return value from a single B<sendmsg>(2)  call).
fr: Le champ I<msg_hdr> est une structure  I<msghdr>, conformément à B<sendmsg>(2). Le champ I<msg_len> est le nombre d'octets du message dans I<msg_hdr> qui ont été envoyés. Ce champ a la même valeur que la valeur de retour de la simple commande B<sendmsg>(2).

note: type: Plain text
en: The I<flags> argument contains flags ORed together.  The flags are the same as for B<sendmsg>(2).
fr: L'argument I<flags> contient le OU binaire de la collection des attributs. Les attributs sont ceux documentés pour B<sendmsg>(2).

note: type: Plain text
en: A blocking B<sendmmsg>()  call blocks until I<vlen> messages have been sent.  A nonblocking call sends as many messages as possible (up to the limit specified by I<vlen>)  and returns immediately.
fr: Un appel bloquant B<sendmmsg>() bloque jusqu'à ce que I<vlen> messages aient été envoyés. Un appel non bloquant envoie autant de messages que possible (jusqu'à la limite indiquée par I<vlen>) et retourne immédiatement.

note: type: Plain text
en: On return from B<sendmmsg>(), the I<msg_len> fields of successive elements of I<msgvec> are updated to contain the number of bytes transmitted from the corresponding I<msg_hdr>.  The return value of the call indicates the number of elements of I<msgvec> that have been updated.
fr: Au retour de B<sendmmsg>(), les champs I<msg_len> des éléments successifs de I<msgvec> sont mis à jour pour contenir le nombre d'octets transmis depuis le I<msg_hdr> correspondant. La valeur de retour de l'appel indique le nombre d'éléments de I<msgvec> mis à jour.

note: type: Plain text
en: On success, B<sendmmsg>()  returns the number of messages sent from I<msgvec>; if this is less than I<vlen>, the caller can retry with a further B<sendmmsg>()  call to send the remaining messages.
fr: En cas du succès, B<sendmmsg>() retourne le nombre de messages envoyés depuis I<msgvec> ; Si ce nombre est strictement inférieur à I<vlen>, l'appelant peut réessayer avec un nouvel appel B<sendmmsg>() pour envoyer les messages restants.

note: type: Plain text
en: On error, -1 is returned, and I<errno> is set to indicate the error.
fr: En cas d'erreur, -1 est renvoyé et I<errno> est définie pour préciser l'erreur.

note: commit 728ffb86f10873aaf4abd26dde691ee40ae731fe ... only return an error if no datagrams could be sent. If less than the requested number of messages were sent, the application must retry starting at the first failed one and if the problem is persistent the error will be returned. This matches the b
en: Errors are as for B<sendmsg>(2).  An error is returned only if no datagrams could be sent.
fr: Les erreurs sont les mêmes que pour B<sendmsg>(2). Une erreur n'est retournée seulement si aucun datagramme n'a pu être envoyé.

note: type: Plain text
en: The B<sendmmsg>()  system call was added in Linux 3.0.  Support in glibc was added in version 2.14.
fr: L'appel système B<sendmmsg>() a été ajouté dans Linux 3.0. La prise en charge dans la glibc a été ajoutée dans la version 2.14.

note: type: Plain text
en: B<sendmmsg>()  is Linux-specific.
fr: B<sendmmsg>() est spécifique à Linux.

note: commit 98382f419f32d2c12d021943b87dea555677144b net: Cap number of elements for sendmmsg To limit the amount of time we can spend in sendmmsg, cap the number of elements to UIO_MAXIOV (currently 1024). For error handling an application using sendmmsg needs to retry at the first unsent message, so ca
en: The value specified in I<vlen> is capped to B<UIO_MAXIOV> (1024).
fr: La valeur indiquée dans I<vlen> ne peut pas dépasser B<UIO_MAXIOV> (1024).

note: type: Plain text
en: The example below uses B<sendmmsg>()  to send I<onetwo> and I<three> in two distinct UDP datagrams using one system call.  The contents of the first datagram originates from a pair of buffers.
fr: L'exemple ci-dessous utilise B<sendmmsg>() pour envoyer I<undeux> et I<trois> dans deux datagrammes UDP distincts en utilisant un seul appel système. Les contenus des premiers datagrammes proviennent d'une paire de tampons.

note: type: Plain text
en: int
    main(void)
    {
        int sockfd;
        struct sockaddr_in sa;
        struct mmsghdr msg[2];
        struct iovec msg1[2], msg2;
        int retval;
fr: int
    main(void)
    {
        int sockfd;
        struct sockaddr_in sa;
        struct mmsghdr msg[2];
        struct iovec msg1[2], msg2;
        int resultat;

note: type: Plain text
en:     memset(msg1, 0, sizeof(msg1));
        msg1[0].iov_base = "one";
        msg1[0].iov_len = 3;
        msg1[1].iov_base = "two";
        msg1[1].iov_len = 3;
fr:     memset(msg1, 0, sizeof(msg1));
        msg1[0].iov_base = "un";
        msg1[0].iov_len = 2;
        msg1[1].iov_base = "deux";
        msg1[1].iov_len = 4;

note: type: Plain text
en:     memset(&msg2, 0, sizeof(msg2));
        msg2.iov_base = "three";
        msg2.iov_len = 5;
fr:     memset(&msg2, 0, sizeof(msg2));
        msg2.iov_base = "trois";
        msg2.iov_len = 5;

note: type: Plain text
en:     retval = sendmmsg(sockfd, msg, 2, 0);
        if (retval == -1)
            perror("sendmmsg()");
        else
            printf("%d messages sent\en", retval);
fr:     resultat = sendmmsg(sockfd, msg, 2, 0);
        if (resultat == -1)
            perror("sendmmsg()");
        else
            printf("%d messages envoyés\en", resultat);

note: type: TH
en: 2014-02-28
fr: 28 février 2014

note: type: Plain text
en: sockatmark - determine whether socket is at out-of-band mark
fr: sockatmark - Déterminer si la socket a atteint la marque de données hors-bande

note: type: Plain text
en: B<sockatmark>(): _POSIX_C_SOURCE\ E<gt>=\ 200112L || _XOPEN_SOURCE\ E<gt>=\ 600
fr: B<sockatmark>() : _POSIX_C_SOURCE\ E<gt>=\ 200112L || _XOPEN_SOURCE\ E<gt>=\ 600

note: type: Plain text
en: B<sockatmark>()  returns a value indicating whether or not the socket referred to by the file descriptor I<sockfd> is at the out-of-band mark.  If the socket is at the mark, then 1 is returned; if the socket is not at the mark, 0 is returned.  This function does not remove the out-of-band mark.
fr: B<sockatmark>() renvoie une valeur indiquant si oui ou non la socket référencée par le descripteur de fichier I<sockfd> a atteint une marque de données hors-bande. Si la socket a atteint la marque, la fonction renvoie 1, sinon elle renvoie 0. Cette fonction ne supprime pas la marque de données hors-bande.

note: type: Plain text
en: A successful call to B<sockatmark>()  returns 1 if the socket is at the out-of-band mark, or 0 if it is not.  On error, -1 is returned and I<errno> is set to indicate the error.
fr: Un appel réussit à B<sockatmark>() renvoie 1 si la socket a atteint la marque de données hors-bande, ou 0 dans le cas contraire. En cas d'erreur, elle renvoie -1 et écrit I<errno> en conséquence.

note: type: Plain text
en: I<sockfd> is not a valid file descriptor.
fr: I<sockfd> n'est pas un descripteur de fichier valable.

note: POSIX.1 says ENOTTY for this case type: Plain text
en: I<sockfd> is not a file descriptor to which B<sockatmark>()  can be applied.
fr: I<sockfd> n'est pas un descripteur de fichier sur lequel B<sockatmark>() peut s'appliquer.

note: type: Plain text
en: B<sockatmark>()  was added to glibc in version 2.2.4.
fr: B<sockatmark>() a été ajoutée à la glibc dans la version 2.2.4.

note: type: Plain text
en: The B<sockatmark>()  function is thread-safe.
fr: La fonction B<sockatmark>() est sûre dans un contexte multithread.

note: type: Plain text
en: If B<sockatmark>()  returns 1, then the out-of-band data can be read using the B<MSG_OOB> flag of B<recv>(2).
fr: Si B<sockatmark>() renvoie 1, les données hors-bande peuvent être lues en utilisant l'attribut B<MSG_OOB> de B<recv>(2).

note: type: Plain text
en: Out-of-band data is supported only on some stream socket protocols.
fr: Les données hors-bande ne sont supportées que par certains protocoles de socket de flux.

note: type: Plain text
en: B<sockatmark>()  can safely be called from a handler for the B<SIGURG> signal.
fr: B<sockatmark>() peut être appelée de manière sûre par un gestionnaire pour le signal B<SIGURG>.

note: type: Plain text
en: B<sockatmark>()  is implemented using the B<SIOCATMARK> B<ioctl>(2)  operation.
fr: B<sockatmark>() est implémentée en utilisant l'opération B<ioctl>(2) B<SIOCATMARK>.

note: type: Plain text
en: Prior to glibc 2.4, B<sockatmark>()  did not work.
fr: Avant la glibc 2.4, B<sockatmark>() ne fonctionnait pas.

note: type: Plain text
en: The following code can be used after receipt of a B<SIGURG> signal to read (and discard) all data up to the mark, and then read the byte of data at the mark:
fr: Le code suivant peut être utilisé après la réception d'un signal B<SIGURG> pour lire (et abandonner) toutes les données jusqu'à la marque de données hors-bande, puis lit l'octet de donnée à la marque\ :

note: type: TH
en: 2013-12-31
fr: 31 décembre 2013

note: type: Plain text
en: socket - create an endpoint for communication
fr: socket - Créer un point de communication

note: type: Plain text
en: B<#include E<lt>sys/types.hE<gt>> /* See NOTES */
fr: B<#include E<lt>sys/types.hE<gt>> /* Consultez NOTES */

note: type: Plain text
en: B<socket>()  creates an endpoint for communication and returns a descriptor.
fr: B<socket>() crée un point de communication, et renvoie un descripteur.

note: type: Plain text
en: The I<domain> argument specifies a communication domain; this selects the protocol family which will be used for communication.  These families are defined in I<E<lt>sys/socket.hE<gt>>.  The currently understood formats include:
fr: Le paramètre I<domain> indique le domaine de communication pour le dialogue\ ; ceci sélectionne la famille de protocole à employer. Elles sont définies dans le fichier I<E<lt>sys/socket.hE<gt>>. Les formats actuellement proposés sont\ :

note: type: tbl table
en: Name:Purpose:Man page
fr: Nom:Utilisation:Page

note: type: tbl table
en: Local communication
fr: Communication locale

note: type: tbl table
en: T}:IPv4 Internet protocols:T{
fr: T}:Protocoles Internet IPv4:T{

note: type: tbl table
en: T}:IPv6 Internet protocols:T{
fr: T}:Protocoles Internet IPv6:T{

note: type: tbl table
en: T}:IPX - Novell protocols:
fr: T}:IPX - Protocoles Novell:

note: type: tbl table
en: Kernel user interface device
fr: Interface utilisateur noyau

note: type: tbl table
en: T}:ITU-T X.25 / ISO-8208 protocol:T{
fr: T}:Protocole ITU-T X.25 / ISO-8208:T{

note: type: tbl table
en: Amateur radio AX.25 protocol
fr: Protocole AX.25 radio amateur

note: type: tbl table
en: T}:Access to raw ATM PVCs:
fr: T}:Accès direct ATM PVCs:

note: type: tbl table
en: Low level packet interface
fr: Interface paquet bas-niveau

note: type: Plain text
en: The socket has the indicated I<type>, which specifies the communication semantics.  Currently defined types are:
fr: La socket a le I<type> indiqué, ce qui indique la sémantique des communications. Les types définis actuellement sont\ :

note: type: Plain text
en: Provides sequenced, reliable, two-way, connection-based byte streams.  An out-of-band data transmission mechanism may be supported.
fr: Support de dialogue garantissant l'intégrité, fournissant un flux de données binaires, et intégrant un mécanisme pour les transmissions de données hors-bande.

note: type: Plain text
en: Supports datagrams (connectionless, unreliable messages of a fixed maximum length).
fr: Transmissions sans connexion, non garantie, de datagrammes de longueur maximale fixe.

note: type: Plain text
en: Provides a sequenced, reliable, two-way connection-based data transmission path for datagrams of fixed maximum length; a consumer is required to read an entire packet with each input system call.
fr: Dialogue garantissant l'intégrité, pour le transport de datagrammes de longueur fixe. Le lecteur doit lire le paquet de données complet à chaque appel système récupérant l'entrée.

note: type: Plain text
en: Provides raw network protocol access.
fr: Accès direct aux données réseau.

note: type: Plain text
en: Provides a reliable datagram layer that does not guarantee ordering.
fr: Transmission fiable de datagrammes, sans garantie de l'ordre de délivrance.

note: type: Plain text
en: Obsolete and should not be used in new programs; see B<packet>(7).
fr: Obsolète, à ne pas utiliser dans les programmes actuels. Consultez B<packet>(7).

note: type: Plain text
en: Some socket types may not be implemented by all protocol families.
fr: Certains types de sockets peuvent ne pas être implémentés par toutes les familles de protocoles.

note: type: Plain text
en: Since Linux 2.6.27, the I<type> argument serves a second purpose: in addition to specifying a socket type, it may include the bitwise OR of any of the following values, to modify the behavior of B<socket>():
fr: Depuis Linux 2.6.27, le paramètre I<type> a un autre objectif : en plus d'indiquer le type de socket, il peut inclure les valeurs suivantes en les combinant par un OU binaire, pour modifier le comportement de B<socket>() :

note: type: Plain text
en: The I<protocol> specifies a particular protocol to be used with the socket.  Normally only a single protocol exists to support a particular socket type within a given protocol family, in which case I<protocol> can be specified as 0.  However, it is possible that many protocols may exist, in which case a particular protocol must be specified in this manner.  The protocol number to use is specific to the ``communication domain'' in which communication is to take place; see B<protocols>(5).  See B<getprotoent>(3)  on how to map protocol name strings to protocol numbers.
fr: Le protocole à utiliser sur la socket est indiqué par l'argument I<protocol>. Normalement, il n'y a qu'un seul protocole par type de socket pour une famille donnée, auquel cas l'argument I<protocol> peut être nul. Néanmoins, rien ne s'oppose à ce que plusieurs protocoles existent, auquel cas il est nécessaire de le spécifier. Le numéro de protocole dépend du domaine de communication de la socket\ ; consultez B<protocols>(5). Consultez B<getprotoent>(3) pour savoir comment associer un nom de protocole à un numéro.

note: type: Plain text
en: Sockets of type B<SOCK_STREAM> are full-duplex byte streams, similar to pipes.  They do not preserve record boundaries.  A stream socket must be in a I<connected> state before any data may be sent or received on it.  A connection to another socket is created with a B<connect>(2)  call.  Once connected, data may be transferred using B<read>(2)  and B<write>(2)  calls or some variant of the B<send>(2)  and B<recv>(2)  calls.  When a session has been completed a B<close>(2)  may be performed.  Out-of-band data may also be transmitted as described in B<send>(2)  and received as described in B<recv>(2).
fr: Une socket de type B<SOCK_STREAM> est un flux d'octets full-duplex, similaire aux tubes (pipes). Elle ne préserve pas les limites d'enregistrements. Une socket SOCK_STREAM doit être dans un état I<connecté> avant que des données puisse y être lues ou écrites. Une connexion sur une autre socket est établie par l'appel système B<connect>(2). Une fois connectée, les données y sont transmises par B<read>(2) et B<write>(2) ou par des variantes de B<send>(2) et B<recv>(2). Quand une session se termine, on referme la socket avec B<close>(2). Les données hors-bande sont envoyées ou reçues en utilisant B<send>(2) et B<recv>(2).

note: type: Plain text
en: The communications protocols which implement a B<SOCK_STREAM> ensure that data is not lost or duplicated.  If a piece of data for which the peer protocol has buffer space cannot be successfully transmitted within a reasonable length of time, then the connection is considered to be dead.  When B<SO_KEEPALIVE> is enabled on the socket the protocol checks in a protocol-specific manner if the other end is still alive.  A B<SIGPIPE> signal is raised if a process sends or receives on a broken stream; this causes naive processes, which do not handle the signal, to exit.  B<SOCK_SEQPACKET> sockets employ the same system calls as B<SOCK_STREAM> sockets.  The only difference is that B<read>(2)  calls will return only the amount of data requested, and any data remaining in the arriving packet will be discarded.  Also all message boundaries in incoming datagrams are preserved.
fr: Les protocoles de communication qui implémentent les sockets B<SOCK_STREAM> garantissent qu'aucune donnée n'est perdue ou dupliquée. Si un bloc de données, pour lequel le correspondant a suffisamment de place dans son tampon, n'est pas transmis correctement dans un délai raisonnable, la connexion est considérée comme inutilisable. Si l'option B<SO_KEEPALIVE> est activée sur la socket, le protocole vérifie, d'une manière qui lui est spécifique, si le correspondant est toujours actif. Un signal B<SIGPIPE> est envoyé au processus tentant d'écrire sur une socket inutilisable, forçant les programmes ne gérant pas ce signal à se terminer. Les sockets de type B<SOCK_SEQPACKET> emploient les mêmes appels système que celles de types B<SOCK_STREAM>, à la différence que la fonction B<read>(2) ne renverra que le nombre d'octets requis, et toute autre donnée restante dans le paquet sera éliminée. De plus, les frontières des messages seront préservées.

note: type: Plain text
en: B<SOCK_DGRAM> and B<SOCK_RAW> sockets allow sending of datagrams to correspondents named in B<sendto>(2)  calls.  Datagrams are generally received with B<recvfrom>(2), which returns the next datagram along with the address of its sender.
fr: Les sockets de type B<SOCK_DGRAM> ou B<SOCK_RAW> permettent l'envoi de datagrammes aux correspondants indiqués dans l'appel système B<sendto>(2). Les datagrammes sont généralement lus par la fonction B<recvfrom>(2), qui fournit également l'adresse du correspondant.

note: type: Plain text
en: B<SOCK_PACKET> is an obsolete socket type to receive raw packets directly from the device driver.  Use B<packet>(7)  instead.
fr: Les sockets B<SOCK_PACKET> sont obsolètes. Elles servent à recevoir les paquets bruts directement depuis le gestionnaire de périphérique. Utilisez plutôt B<packet>(7).

note: type: Plain text
en: An B<fcntl>(2)  B<F_SETOWN> operation can be used to specify a process or process group to receive a B<SIGURG> signal when the out-of-band data arrives or B<SIGPIPE> signal when a B<SOCK_STREAM> connection breaks unexpectedly.  This operation may also be used to set the process or process group that receives the I/O and asynchronous notification of I/O events via B<SIGIO>.  Using B<F_SETOWN> is equivalent to an B<ioctl>(2)  call with the B<FIOSETOWN> or B<SIOCSPGRP> argument.
fr: Un appel à B<fcntl>(2) avec l'argument B<F_SETOWN> permet de préciser un processus ou un groupe de processus qui recevront un signal B<SIGURG> lors de l'arrivée de données hors-bande, ou le signal B<SIGPIPE> lorsqu'une connexion sur une socket B<SOCK_STREAM> se termine inopinément. Cette fonction permet également de définir le processus ou groupe de processus qui recevront une notification asynchrone des événements d'entrées-sorties par le signal B<SIGIO>. L'utilisation de B<F_SETOWN> est équivalent à un appel B<ioctl>(2) avec l'argument B<FIOSETOWN> ou B<SIOCSPGRP>.

note: type: Plain text
en: When the network signals an error condition to the protocol module (e.g., using a ICMP message for IP) the pending error flag is set for the socket.  The next operation on this socket will return the error code of the pending error.  For some protocols it is possible to enable a per-socket error queue to retrieve detailed information about the error; see B<IP_RECVERR> in B<ip>(7).
fr: Lorsque le réseau indique une condition d'erreur au module du protocole (par exemple avec un message ICMP pour IP), un drapeau signale une erreur en attente sur la socket. L'opération suivante sur cette socket renverra ce code d'erreur. Pour certains protocoles, il est possible d'activer une file d'attente d'erreurs par socket. Pour plus de détails, consultez B<IP_RECVERR> dans B<ip>(7).

note: type: Plain text
en: The operation of sockets is controlled by socket level I<options>.  These options are defined in I<E<lt>sys/socket.hE<gt>>.  The functions B<setsockopt>(2)  and B<getsockopt>(2)  are used to set and get options, respectively.
fr: Les opérations sur les sockets sont contrôlées par des I<options> du niveau socket. Ces options sont définies dans I<E<lt>sys/socket.hE<gt>>. Les fonctions B<setsockopt>(2) et B<getsockopt>(2) sont utilisées respectivement pour définir ou lire les options.

note: type: Plain text
en: On success, a file descriptor for the new socket is returned.  On error, -1 is returned, and I<errno> is set appropriately.
fr: B<socket>() renvoie un descripteur référençant la socket créée en cas de réussite. En cas d'échec -1 est renvoyé, et I<errno> contient le code d'erreur.

note: type: Plain text
en: Permission to create a socket of the specified type and/or protocol is denied.
fr: La création d'une socket avec le type et le protocole indiqués n'est pas autorisée.

note: type: Plain text
en: The implementation does not support the specified address family.
fr: L'implémentation ne supporte pas la famille d'adresses indiquée.

note: type: Plain text
en: Unknown protocol, or protocol family not available.
fr: Protocole inconnu, ou famille de protocole inexistante.

note: Since Linux 2.6.27 type: Plain text
en: Invalid flags in I<type>.
fr: Attributs incorrects dans I<type>.

note: type: Plain text
en: Process file table overflow.
fr: La table des fichiers est pleine.

note: type: TP
en: B<ENOBUFS> or B<ENOMEM>
fr: B<ENOBUFS> ou B<ENOMEM>

note: type: Plain text
en: Insufficient memory is available.  The socket cannot be created until sufficient resources are freed.
fr: Pas suffisamment d'espace pour allouer les tampons nécessaires. La socket ne peut être créée tant que suffisamment de ressources ne sont pas libérées.

note: type: Plain text
en: The protocol type or the specified protocol is not supported within this domain.
fr: Le type de protocole, ou le protocole lui-même n'est pas disponible dans ce domaine de communication.

note: type: Plain text
en: Other errors may be generated by the underlying protocol modules.
fr: D'autres erreurs peuvent être dues aux modules de protocoles sous-jacents.

note: type: Plain text
en: 4.4BSD, POSIX.1-2001.
fr: BSD\ 4.4, POSIX.1-2001.

note: type: Plain text
en: The B<SOCK_NONBLOCK> and B<SOCK_CLOEXEC> flags are Linux-specific.
fr: Les attributs B<SOCK_NONBLOCK> et B<SOCK_CLOEXEC> sont spécifiques à Linux.

note: type: Plain text
en: B<socket>()  appeared in 4.2BSD.  It is generally portable to/from non-BSD systems supporting clones of the BSD socket layer (including System V variants).
fr: La fonction B<socket>() est apparue dans BSD\ 4.2. Elle est généralement portable de/vers les systèmes non-BSD supportant des clones des sockets BSD (y compris les variantes de System V).

note: type: Plain text
en: The manifest constants used under 4.x BSD for protocol families are B<PF_UNIX>, B<PF_INET>, and so on, while B<AF_UNIX>, B<AF_INET>, and so on are used for address families.  However, already the BSD man page promises: "The protocol family generally is the same as the address family", and subsequent standards use AF_* everywhere.
fr: Les constantes explicites utilisées sous BSD\ 4.x pour les familles de protocoles sont B<PF_UNIX>, B<PF_INET>, etc. alors que B<AF_UNIX>, B<AF_INET>, etc. sont utilisées pour les familles d'adresses. Toutefois, même la page de manuel de BSD indiquait «\ La famille de protocoles est généralement la même que la famille d'adresses\ », et les standards ultérieurs utilisent AF_* partout.

note: type: Plain text
en: An example of the use of B<socket>()  is shown in B<getaddrinfo>(3).
fr: Un exemple d'utilisation de B<socket>() se trouve dans la page de manuel de B<getaddrinfo>(3).

note: type: Plain text
en: \(lqAn Introductory 4.3BSD Interprocess Communication Tutorial\(rq and \(lqBSD Interprocess Communication Tutorial\(rq, reprinted in I<UNIX Programmer's Supplementary Documents Volume 1.>
fr: «\ An Introductory 4.3BSD Interprocess Communication Tutorial\ » et «\ BSB Interprocess Communication Tutorial\ », réimprimés dans I<UNIX Programmer's Supplementary Documents Volume 1>.

note: type: TH
en: 2014-02-21
fr: 21 février 2014

note: type: Plain text
en: socket - Linux socket interface
fr: socket - Interface Linux aux sockets

note: type: Plain text
en: I<sockfd>B< = socket(int >I<socket_family>B<, int >I<socket_type>B<, int >I<protocol>B<);>
fr: I<sockfd>B< = socket(int >I<famille_socket>B<, int >I<type_socket>B<, int >I<protocole>B<);>

note: type: Plain text
en: This manual page describes the Linux networking socket layer user interface.  The BSD compatible sockets are the uniform interface between the user process and the network protocol stacks in the kernel.  The protocol modules are grouped into I<protocol families> such as B<AF_INET>, B<AF_IPX>, and B<AF_PACKET>, and I<socket types> such as B<SOCK_STREAM> or B<SOCK_DGRAM>.  See B<socket>(2)  for more information on families and types.
fr: 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 I<familles de protocoles> tels que B<AF_INET>, B<AF_IPX> et B<AF_PACKET>, et en I<types de sockets> comme B<SOCK_STREAM> ou B<SOCK_DGRAM>. Consultez B<socket>(2) pour plus d'informations sur les familles et les types de sockets.

note: type: SS
en: Socket-layer functions
fr: Fonctions du niveau socket

note: type: Plain text
en: 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.
fr: 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.

note: type: Plain text
en: B<socket>(2)  creates a socket, B<connect>(2)  connects a socket to a remote socket address, the B<bind>(2)  function binds a socket to a local socket address, B<listen>(2)  tells the socket that new connections shall be accepted, and B<accept>(2)  is used to get a new socket with a new incoming connection.  B<socketpair>(2)  returns two connected anonymous sockets (implemented only for a few local families like B<AF_UNIX>)
fr: B<socket>(2) crée une socket, B<connect>(2) connecte une socket à une adresse de socket distante, la fonction B<bind>(2) attache une socket à une adresse locale, B<listen>(2) indique à la socket que de nouvelles connexions doivent être acceptées, et B<accept>(2) fournit une nouvelle socket avec la nouvelle connexion entrante. B<socketpair>(2) renvoie deux sockets anonymes connectées (seulement implémenté pour quelques familles locales comme B<AF_UNIX>).

note: type: Plain text
en: B<send>(2), B<sendto>(2), and B<sendmsg>(2)  send data over a socket, and B<recv>(2), B<recvfrom>(2), B<recvmsg>(2)  receive data from a socket.  B<poll>(2)  and B<select>(2)  wait for arriving data or a readiness to send data.  In addition, the standard I/O operations like B<write>(2), B<writev>(2), B<sendfile>(2), B<read>(2), and B<readv>(2)  can be used to read and write data.
fr: B<send>(2), B<sendto>(2), et B<sendmsg>(2) envoient des données sur une socket, et B<recv>(2), B<recvfrom>(2) et B<recvmsg>(2) reçoivent les données envoyées par une socket. B<poll>(2) et B<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 B<write>(2), B<writev>(2), B<sendfile>(2), B<read>(2) et B<readv>(2) peuvent être utilisées pour la lecture et l'écriture des données.

note: type: Plain text
en: B<getsockname>(2)  returns the local socket address and B<getpeername>(2)  returns the remote socket address.  B<getsockopt>(2)  and B<setsockopt>(2)  are used to set or get socket layer or protocol options.  B<ioctl>(2)  can be used to set or read some other options.
fr: B<getsockname>(2) renvoie l'adresse de la socket locale et B<getpeername>(2) renvoie l'adresse de la socket distante. B<getsockopt>(2) et B<setsockopt>(2) servent à définir et obtenir les options de la couche socket ou protocole. B<ioctl>(2) peut être utilisé pour lire et écrire d'autres options.

note: type: Plain text
en: B<close>(2)  is used to close a socket.  B<shutdown>(2)  closes parts of a full-duplex socket connection.
fr: B<close>(2) sert à fermer une socket. B<shutdown>(2) ferme une partie des connexions d'une socket multiple.

note: type: Plain text
en: Seeking, or calling B<pread>(2)  or B<pwrite>(2)  with a nonzero position is not supported on sockets.
fr: La recherche ou l'utilisation de B<pread>(2) et B<pwrite>(2) avec un décalage non nul n'est pas possible sur les sockets.

note: type: Plain text
en: It is possible to do nonblocking I/O on sockets by setting the B<O_NONBLOCK> flag on a socket file descriptor using B<fcntl>(2).  Then all operations that would block will (usually)  return with B<EAGAIN> (operation should be retried later); B<connect>(2)  will return B<EINPROGRESS> error.  The user can then wait for various events via B<poll>(2)  or B<select>(2).
fr: Des opérations d'entrée-sortie non bloquantes sur les sockets sont possibles en définissant l'attribut B<O_NONBLOCK> du descripteur de la socket avec B<fcntl>(2). Toutes les opérations qui devraient normalement bloquer se terminent alors avec l'erreur B<EAGAIN> (l'opération devra être retentée ultérieurement). B<connect>(2) renverra l'erreur B<EINPROGRESS>. L'utilisateur peut alors attendre divers événements avec B<poll>(2) ou B<select>(2).

note: type: tbl table
en: I/O events
fr: Événements E/S

note: type: tbl table
en: Event:Poll flag:Occurrence
fr: Événement:Appel:Circonstance

note: type: tbl table
en: Read:POLLIN:T{
fr: Lecture:POLLIN:T{

note: type: tbl table
en: New data arrived.
fr: Arrivée de nouvelles données

note: type: tbl table
en: A connection setup has been completed
fr: Configuration d'une connexion achevée

note: type: tbl table
en: (for connection-oriented sockets)
fr: (pour les sockets orientées connexion)

note: type: tbl table
en: Read:POLLHUP:T{
fr: Lecture:POLLHUP:T{

note: type: tbl table
en: A disconnection request has been initiated by the other end.
fr: Demande de déconnexion initiée par l'autre extrémité

note: type: tbl table
en: A connection is broken (only for connection-oriented protocols).
fr: Connexion rompue (seulement pour les protocoles orientés connexion)

note: type: tbl table
en: When the socket is written
fr: Lors de l'écriture sur la socket, le signal

note: type: tbl table
en: is also sent.
fr: est aussi émis.

note: type: tbl table
en: Write:POLLOUT:T{
fr: Écriture:POLLOUT:T{

note: type: tbl table
en: Socket has enough send buffer space for writing new data.
fr: La socket a assez de place dans le tampon d'émission pour écrire de nouvelles données.

note: type: tbl table
en: Read/Write:T{
fr: Lect./Écrit.:T{

note: type: tbl table
en: An outgoing
fr: Un appel sortant à

note: type: tbl table
en: finished.
fr: est terminé.

note: type: tbl table
en: Read/Write:POLLERR:An asynchronous error occurred.
fr: Lect./Écrit.:POLLERR:Une erreur asynchrone s'est produite.

note: type: tbl table
en: Read/Write:POLLHUP:The other end has shut down one direction.
fr: Lect./Écrit.:POLLHUP:T{
    Le correspondant a clos un sens de communication.
    T}

note: type: tbl table
en: Urgent data arrived.
fr: Arrivée de données urgentes.

note: type: tbl table
en: is sent then.
fr: est alors envoyé.

note: type: Plain text
en: An alternative to B<poll>(2)  and B<select>(2)  is to let the kernel inform the application about events via a B<SIGIO> signal.  For that the B<O_ASYNC> flag must be set on a socket file descriptor via B<fcntl>(2)  and a valid signal handler for B<SIGIO> must be installed via B<sigaction>(2).  See the I<Signals> discussion below.
fr: Une alternative à B<poll>(2) et B<select>(2) est de laisser le noyau informer l'application des événements par l'intermédiaire d'un signal B<SIGIO>. Pour cela, l'attribut B<O_ASYNC> doit être défini sur un descripteur de fichier de la socket via B<fcntl>(2) et un gestionnaire de signal valable pour B<SIGIO> doit être installé avec B<sigaction>(2). Consultez les remarques sur les I<Signaux> ci-dessous.

note: type: SS
en: Socket address structures
fr: Structures d'adresse de socket

note: type: Plain text
en: Each socket domain has its own format for socket addresses, with a domain-specific address structure.  Each of these structures begins with an integer "family" field (typed as I<sa_family_t>)  that indicates the type of the address structure.  This allows the various system calls (e.g., B<connect>(2), B<bind>(2), B<accept>(2), B<getsockname>(2), B<getpeername>(2)), which are generic to all socket domains, to determine the domain of a particular socket address.
fr: 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 I<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 B<connect>(2), B<bind>(2), B<accept>(2), B<getsockname>(2), B<getpeername>(2)) de déterminer le domaine d'une adresse de socket donnée.

note: type: Plain text
en: To allow any type of socket address to be passed to interfaces in the sockets API, the type I<struct sockaddr> is defined.  The purpose of this type is purely to allow casting of domain-specific socket address types to a "generic" type, so as to avoid compiler warnings about type mismatches in calls to the sockets API.
fr: Le type I<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.

note: type: Plain text
en: In addition, the sockets API provides the data type I<struct sockaddr_storage>.  This type is suitable to accommodate all supported domain-specific socket address structures; it is large enough and is aligned properly.  (In particular, it is large enough to hold IPv6 socket addresses.)  The structure includes the following field, which can be used to identify the type of socket address actually stored in the structure:
fr: De plus, l'API des sockets fournit le type de données I<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 :

note: type: Plain text
en: The I<sockaddr_storage> structure is useful in programs that must handle socket addresses in a generic way (e.g., programs that must deal with both IPv4 and IPv6 socket addresses).
fr: La structure I<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).

note: type: SS
en: Socket options
fr: Options de sockets

note: 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 type: Plain text
en: The socket options listed below can be set by using B<setsockopt>(2)  and read with B<getsockopt>(2)  with the socket level set to B<SOL_SOCKET> for all sockets.  Unless otherwise noted, I<optval> is a pointer to an I<int>.
fr: Les options présentées ci-dessous peuvent être définies en utilisant B<setsockopt>(2) et lues avec B<getsockopt>(2) avec le niveau de socket positionné à B<SOL_SOCKET>, et ce pour toutes les sockets. Sauf mention contraire, I<optval> est un pointeur vers un I<int>.

note: type: Plain text
en: Returns a value indicating whether or not this socket has been marked to accept connections with B<listen>(2).  The value 0 indicates that this is not a listening socket, the value 1 indicates that this is a listening socket.  This socket option is read-only.
fr: Renvoie une valeur indiquant si la socket a été déclarée comme acceptant les connexions à l'aide de B<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.

note: type: Plain text
en: Bind this socket to a particular device like \(lqeth0\(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 B<IFNAMSIZ>.  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 B<AF_INET> sockets.  It is not supported for packet sockets (use normal B<bind>(2)  there).
fr: 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 B<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 B<AF_INET>. Ce n'est pas géré pour les sockets paquet (utilisez pour cela B<bind>(2)).

note: type: Plain text
en: Before Linux 3.8, this socket option could be set, but could not retrieved with B<getsockopt>(2).  Since Linux 3.8, it is readable.  The I<optlen> argument should contain the buffer size available to receive the device name and is recommended to be B<IFNAMSZ> bytes.  The real device name length is reported back in the I<optlen> argument.
fr: Avant Linux 3.8, cette option de socket pouvait être configurée, sans pouvoir être lue par B<getsockopt>(2). Depuis Linux 3.8, elle est lisible. Le paramètre I<optlen> doit contenir la taille du tampon destiné à recevoir le nom du périphérique, préférablement B<IFNAMSZ>. La véritable longueur du nom du périphérique est renvoyée dans le paramètre I<optlen>.

note: type: Plain text
en: Set or get the broadcast flag.  When enabled, datagram sockets are allowed to send packets to a broadcast address.  This option has no effect on stream-oriented sockets.
fr: 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.

note: type: Plain text
en: Enable BSD bug-to-bug compatibility.  This is used by the UDP protocol module in Linux 2.0 and 2.2.  If enabled, ICMP errors received for a UDP socket will not be passed to the user program.  In later kernel versions, support for this option has been phased out: Linux 2.4 silently ignores it, and Linux 2.6 generates a kernel warning (printk()) if a program uses this option.  Linux 2.0 also enabled BSD bug-to-bug compatibility options (random header changing, skipping of the broadcast flag) for raw sockets with this option, but that was removed in Linux 2.2.
fr: 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.

note: type: Plain text
en: Enable socket debugging.  Only allowed for processes with the B<CAP_NET_ADMIN> capability or an effective user ID of 0.
fr: Active le débogage de socket. Cela n'est autorisé que pour les processus avec la capacité B<CAP_NET_ADMIN> ou un identifiant d'utilisateur effectif égal à 0.

note: type: TP
en: B<SO_DOMAIN> (since Linux 2.6.32)
fr: B<SO_DOMAIN> (depuis Linux 2.6.32)

note: type: Plain text
en: Retrieves the socket domain as an integer, returning a value such as B<AF_INET6>.  See B<socket>(2)  for details.  This socket option is read-only.
fr: Récupère le domaine de socket en tant qu'entier, en renvoyant une valeur telle que B<AF_INET6>. Consultez B<socket>(2)  pour plus de détails. Cette option de socket peut être seulement lue, et pas modifiée.

note: type: Plain text
en: Get and clear the pending socket error.  This socket option is read-only.  Expects an integer.
fr: 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.

note: type: Plain text
en: Don't send via a gateway, send only to directly connected hosts.  The same effect can be achieved by setting the B<MSG_DONTROUTE> flag on a socket B<send>(2)  operation.  Expects an integer boolean flag.
fr: 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 B<MSG_DONTROUTE> durant une opération B<send>(2) sur la socket. Demande un attribut entier booléen.

note: type: Plain text
en: Enable sending of keep-alive messages on connection-oriented sockets.  Expects an integer boolean flag.
fr: Active l'émission de messages périodiques gardant la socket ouverte pour les sockets orientées connexion. Demande un attribut entier booléen.

note: type: Plain text
en: Sets or gets the B<SO_LINGER> option.  The argument is a I<linger> structure.
fr: Définit ou lit l'option B<SO_LINGER>. Le paramètre est une structure I<linger>.

note: type: Plain text
en: struct linger {
        int l_onoff;    /* linger active */
        int l_linger;   /* how many seconds to linger for */
    };
fr: struct linger {
        int l_onoff;    /* définition de l'activité */
        int l_linger;   /* durée d'attente en secondes */
    };

note: type: Plain text
en: When enabled, a B<close>(2)  or B<shutdown>(2)  will not return until all queued messages for the socket have been successfully sent or the linger timeout has been reached.  Otherwise, the call returns immediately and the closing is done in the background.  When the socket is closed as part of B<exit>(2), it always lingers in the background.
fr: Lorsque ce paramètre est actif, un appel à B<close>(2) ou B<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 B<exit>(2), elle attend toujours en arrière-plan.

note: type: TP
en: B<SO_MARK> (since Linux 2.6.25)
fr: B<SO_MARK> (depuis Linux 2.6.25)

note: commit 4a19ec5800fc3bb64e2d87c4d9fdd9e636086fe0 and    914a9ab386a288d0f22252fc268ecbc048cdcbd5 type: Plain text
en: Set the mark for each packet sent through this socket (similar to the netfilter MARK target but socket-based).  Changing the mark can be used for mark-based routing without netfilter or for packet filtering.  Setting this option requires the B<CAP_NET_ADMIN> capability.
fr: 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é B<CAP_NET_ADMIN>.

note: don't document it because it can do too much harm. .B SO_NO_CHECK type: Plain text
en: If this option is enabled, out-of-band data is directly placed into the receive data stream.  Otherwise out-of-band data is passed only when the B<MSG_OOB> flag is set during receiving.
fr: 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 B<MSG_OOB> est défini durant la réception.

note: FIXME Document SO_PASSSEC, added in 2.6.18; there is some info in the 2.6.18 ChangeLog type: Plain text
en: Enable or disable the receiving of the B<SCM_CREDENTIALS> control message.  For more information see B<unix>(7).
fr: Autorise ou interdit la réception des messages de contrôle B<SCM_CREDENTIALS>. Pour plus de détails, consultez B<unix>(7).

note: type: TP
en: B<SO_PEEK_OFF> (since Linux 3.4)
fr: B<SO_PEEK_OFF> (depuis Linux 3.4)

note: commit ef64a54f6e558155b4f149bb10666b9e914b6c54 type: Plain text
en: This option, which is currently supported only for B<unix>(7)  sockets, sets the value of the "peek offset" for the B<recv>(2)  system call when used with B<MSG_PEEK> flag.
fr: Cette option, qui n'est à ce jour garantie que pour les sockets B<unix>(7), définit la valeur de la « position de lecture » (ou « peek offset ») pour l'appel système B<recv>(2) lorsqu'il est invoqué avec l'attribut B<MSG_PEEK>.

note: type: Plain text
en: When this option is set to a negative value (it is set to -1 for all new sockets), traditional behavior is provided: B<recv>(2)  with the B<MSG_PEEK> flag will peek data from the front of the queue.
fr: Lorsque cette option reçoit une valeur négative (elle est initialisée à -1 pour toute nouvelle socket), elle se comporte classiquement : B<recv>(2), avec l'attribut B<MSG_PEEK>, lit les données depuis le début de la file.

note: type: Plain text
en: When the option is set to a value greater than or equal to zero, then the next peek at data queued in the socket will occur at the byte offset specified by the option value.  At the same time, the "peek offset" will be incremented by the number of bytes that were peeked from the queue, so that a subsequent peek will return the next data in the queue.
fr: 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.

note: type: Plain text
en: If data is removed from the front of the queue via a call to B<recv>(2)  (or similar) without the B<MSG_PEEK> flag, the "peek offset" will be decreased by the number of bytes removed.  In other words, receiving data without the B<MSG_PEEK> flag will cause the "peek offset" to be adjusted to maintain the correct relative position in the queued data, so that a subsequent peek will retrieve the data that would have been retrieved had the data not been removed.
fr: Si des données sont retirées de la tête de la file par la fonction B<recv>(2) (ou équivalent) sans l'attribut B<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 B<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.

note: type: Plain text
en: For datagram sockets, if the "peek offset" points to the middle of a packet, the data returned will be marked with the B<MSG_TRUNC> flag.
fr: 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 B<MSG_TRUNC>.

note: type: Plain text
en: The following example serves to illustrate the use of B<SO_PEEK_OFF>.  Suppose a stream socket has the following queued input data:
fr: L'exemple suivant illustre l'usage de B<SO_PEEK_OFF>. Imaginons une socket de flux contenant les données suivantes dans sa file :

note: type: Plain text
en: The following sequence of B<recv>(2)  calls would have the effect noted in the comments:
fr: La séquence suivante d'appels à B<recv>(2) aura l'effet décrit dans les commentaires :

note: type: Plain text
en: int ov = 4;                  // Set peek offset to 4
    setsockopt(fd, SOL_SOCKET, SO_PEEK_OFF, &ov, sizeof(ov));
fr: int ov = 4;                  // affecte 4 à la position de lecture
    setsockopt(fd, SOL_SOCKET, SO_PEEK_OFF, &ov, sizeof(ov));

note: type: Plain text
en: 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
fr: 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

note: type: Plain text
en: Return the credentials of the foreign process connected to this socket.  This is possible only for connected B<AF_UNIX> stream sockets and B<AF_UNIX> stream and datagram socket pairs created using B<socketpair>(2); see B<unix>(7).  The returned credentials are those that were in effect at the time of the call to B<connect>(2)  or B<socketpair>(2).  The argument is a I<ucred> structure; define the B<_GNU_SOURCE> feature test macro to obtain the definition of that structure from I<E<lt>sys/socket.hE<gt>>.  This socket option is read-only.
fr: Renvoie les données d'authentification du processus étranger connecté à cette socket. Cela n'est possible que pour les sockets de flux B<AF_UNIX> connectées et les paires de sockets B<AF_UNIX> de flux et de datagrammes crées avec B<socketpair>(2)\ ; consultez B<unix>(7). Les données retournées sont celles qui étaient effectives au moment de l'appel à B<connect>(2) ou B<socketpair>(2). L'argument est une structure I<ucred>. Il faut définir la macro de test de fonctionnalité B<_GNU_SOURCE> pour activer la définition de cette structure dans I<E<lt>sys/socket.hE<gt>>. Cette option de socket peut être seulement lue, et pas modifiée.

note: type: Plain text
en: Set the protocol-defined priority for all packets to be sent on this socket.  Linux uses this value to order the networking queues: packets with a higher priority may be processed first depending on the selected device queueing discipline.  For B<ip>(7), this also sets the IP type-of-service (TOS) field for outgoing packets.  Setting a priority outside the range 0 to 6 requires the B<CAP_NET_ADMIN> capability.
fr: 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 B<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é B<CAP_NET_ADMIN>.

note: type: TP
en: B<SO_PROTOCOL> (since Linux 2.6.32)
fr: B<SO_PROTOCOL> (depuis Linux 2.6.32)

note: type: Plain text
en: Retrieves the socket protocol as an integer, returning a value such as B<IPPROTO_SCTP>.  See B<socket>(2)  for details.  This socket option is read-only.
fr: Récupère le protocole de socket en tant qu'entier, en renvoyant une valeur telle que B<IPPROTO_SCTP>. Consultez B<socket>(2)  pour plus de détails. Cette option de socket peut être seulement lue, et pas modifiée.

note: 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" behaviour 17 July 2012 http://thread.gmane.org/gmane.linux.kernel/1328935 type: Plain text
en: Sets or gets the maximum socket receive buffer in bytes.  The kernel doubles this value (to allow space for bookkeeping overhead)  when it is set using B<setsockopt>(2), and this doubled value is returned by B<getsockopt>(2).  The default value is set by the I</proc/sys/net/core/rmem_default> file, and the maximum allowed value is set by the I</proc/sys/net/core/rmem_max> file.  The minimum (doubled) value for this option is 256.
fr: 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 B<setsockopt>(2), et cette valeur doublée est retournée par B<getsockopt>(2). La valeur par défaut est définie par le fichier I</proc/sys/net/core/rmem_default> et la valeur maximale autorisée est définie par le fichier I</proc/sys/net/core/rmem_max>. La valeur (doublée) minimale pour cette option est 256.

note: type: TP
en: B<SO_RCVBUFFORCE> (since Linux 2.6.14)
fr: B<SO_RCVBUFFORCE> (depuis Linux 2.6.14)

note: type: Plain text
en: Using this socket option, a privileged (B<CAP_NET_ADMIN>)  process can perform the same task as B<SO_RCVBUF>, but the I<rmem_max> limit can be overridden.
fr: En utilisant cette option de socket, un processus privilégié (B<CAP_NET_ADMIN>) peut exécuter la même tâche que B<SO_RCVBUF>, mais la limite I<rmem_max> peut être remplacée.

note: type: TP
en: B<SO_RCVLOWAT> and B<SO_SNDLOWAT>
fr: B<SO_RCVLOWAT> et B<SO_SNDLOWAT>

note: See http://marc.theaimsgroup.com/?l=linux-kernel&m=111049368106984&w=2 Tested on kernel 2.6.14 -- mtk, 30 Nov 05 type: Plain text
en: Specify the minimum number of bytes in the buffer until the socket layer will pass the data to the protocol (B<SO_SNDLOWAT>)  or the user on receiving (B<SO_RCVLOWAT>).  These two values are initialized to 1.  B<SO_SNDLOWAT> is not changeable on Linux (B<setsockopt>(2)  fails with the error B<ENOPROTOOPT>).  B<SO_RCVLOWAT> is changeable only since Linux 2.4.  The B<select>(2)  and B<poll>(2)  system calls currently do not respect the B<SO_RCVLOWAT> setting on Linux, and mark a socket readable when even a single byte of data is available.  A subsequent read from the socket will block until B<SO_RCVLOWAT> bytes are available.
fr: Indique le nombre minimal d'octets dans le tampon pour que la couche socket passe les données au protocole (B<SO_SNDLOWAT>) ou à l'utilisateur en réception (B<SO_RCVLOWAT>). Ces deux valeurs sont initialisées à 1. B<SO_SNDLOWAT> n'est pas modifiable (B<setsockopt>(2) échoue avec l'erreur B<ENOPROTOOPT>). B<SO_RCVLOWAT> est modifiable seulement depuis Linux 2.4. Les appels système B<select>(2) et B<poll>(2) ne respectent pour le moment pas la définition de B<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 B<SO_RCVLOWAT> octets soient disponibles.

note: type: TP
en: B<SO_RCVTIMEO> and B<SO_SNDTIMEO>
fr: B<SO_RCVTIMEO> et B<SO_SNDTIMEO>

note: Not implemented in 2.0. Implemented in 2.1.11 for getsockopt: always return a zero struct. Implemented in 2.3.41 for setsockopt, and actually used. in fact to EAGAIN type: Plain text
en: Specify the receiving or sending timeouts until reporting an error.  The argument is a I<struct timeval>.  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 I<errno> set to B<EAGAIN> or B<EWOULDBLOCK>, or B<EINPROGRESS> (for B<connect>(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., B<read>(2), B<recvmsg>(2), B<send>(2), B<sendmsg>(2)); timeouts have no effect for B<select>(2), B<poll>(2), B<epoll_wait>(2), and so on.
fr: Indiquer le délai maximal d'émission ou de réception avant de signaler une erreur. Le paramètre est une structure I<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 I<errno> est positionnée à B<EAGAIN> ou B<EWOULDBLOCK>, ou B<EINPROGRESS> (pour B<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 B<read>(2), B<recvmsg>(2), B<send>(2), B<sendmsg>(2))\ ; ils n'ont pas d'effet pour B<select>(2), B<poll>(2), B<epoll_wait>(2), etc.

note: type: Plain text
en: Indicates that the rules used in validating addresses supplied in a B<bind>(2)  call should allow reuse of local addresses.  For B<AF_INET> sockets this means that a socket may bind, except when there is an active listening socket bound to the address.  When the listening socket is bound to B<INADDR_ANY> with a specific port then it is not possible to bind to this port for any local address.  Argument is an integer boolean flag.
fr: Indique que les règles utilisées pour la validation des adresses fournies dans un appel à B<bind>(2) doivent autoriser la réutilisation des adresses locales. Pour les sockets B<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 à B<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.

note: type: TP
en: B<SO_RXQ_OVFL> (since Linux 2.6.33)
fr: B<SO_RXQ_OVFL> (depuis Linux 2.6.33)

note: commit 3b885787ea4112eaa80945999ea0901bf742707f type: Plain text
en: Indicates that an unsigned 32-bit value ancilliary msg (cmsg)  should be attached to received skbs indicating the number of packets dropped by the socket between the last received packet and this received packet
fr: 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.

note: Most (all?) other implementations do not do this -- MTK, Dec 05 See also the comment to SO_RCVBUF (17 Jul 2012 LKML mail) type: Plain text
en: Sets or gets the maximum socket send buffer in bytes.  The kernel doubles this value (to allow space for bookkeeping overhead)  when it is set using B<setsockopt>(2), and this doubled value is returned by B<getsockopt>(2).  The default value is set by the I</proc/sys/net/core/wmem_default> file and the maximum allowed value is set by the I</proc/sys/net/core/wmem_max> file.  The minimum (doubled) value for this option is 2048.
fr: 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 B<setsockopt>(2), et cette valeur doublée est retournée par B<getsockopt>(2). La valeur par défaut est définie par le fichier I</proc/sys/net/core/wmem_default> et la valeur maximale autorisée est définie par le fichier I</proc/sys/net/core/wmem_max>. La valeur (doublée) minimale pour cette option est 2048.

note: type: TP
en: B<SO_SNDBUFFORCE> (since Linux 2.6.14)
fr: B<SO_SNDBUFFORCE> (depuis Linux 2.6.14)

note: type: Plain text
en: Using this socket option, a privileged (B<CAP_NET_ADMIN>)  process can perform the same task as B<SO_SNDBUF>, but the I<wmem_max> limit can be overridden.
fr: En utilisant cette option de socket, un processus privilégié (B<CAP_NET_ADMIN>) peut exécuter la même tâche que B<SO_SNDBUF>, mais la limite I<wmem_max> peut être remplacée.

note: type: Plain text
en: Enable or disable the receiving of the B<SO_TIMESTAMP> control message.  The timestamp control message is sent with level B<SOL_SOCKET> and the I<cmsg_data> field is a I<struct timeval> indicating the reception time of the last packet passed to the user in this call.  See B<cmsg>(3)  for details on control messages.
fr: Active ou désactive la réception des messages de contrôle B<SO_TIMESTAMP>. Le message de contrôle d'horodatage est envoyé avec le niveau B<SOL_SOCKET> et le champ I<cmsg_data> est une structure I<timeval> indiquant la date de réception du dernier paquet fourni à l'utilisateur dans cet appel. Consultez B<cmsg>(3) pour plus de détails sur les messages de contrôle.

note: type: Plain text
en: Gets the socket type as an integer (e.g., B<SOCK_STREAM>).  This socket option is read-only.
fr: Lit le type de socket, sous forme d'entier (comme B<SOCK_STREAM>). Cette option de socket peut être seulement lue, et pas modifiée.

note: type: TP
en: B<SO_BUSY_POLL> (since Linux 3.11)
fr: B<SO_BUSY_POLL> (depuis Linux 3.11)

note: type: Plain text
en: Sets the approximate time in microseconds to busy poll on a blocking receive when there is no data.  Increasing this value requires B<CAP_NET_ADMIN>.  The default for this option is controlled by the I</proc/sys/net/core/busy_read> file.
fr: Définit la durée approximative, en milliseconde, d’attente active de réception bloquante en absence de données. B<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 I</proc/sys/net/core/busy_read>.

note: type: Plain text
en: The value in the I</proc/sys/net/core/busy_poll> file determines how long B<select>(2)  and B<poll>(2)  will busy poll when they operate on sockets with B<SO_BUSY_POLL> set and no events to report are found.
fr: La valeur dans le fichier I</proc/sys/net/core/busy_poll> détermine la durée pendant laquelle B<select>(2) et B<poll>(2) seront en attente active lors d’une opération sur des sockets avec B<SO_BUSY_POLL> défini et qu’aucun événement à signaler n’est trouvé.

note: type: Plain text
en: In both cases, busy polling will only be done when the socket last received data from a network device that supports this option.
fr: 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.

note: type: Plain text
en: While busy polling may improve latency of some applications, care must be taken when using it since this will increase both CPU utilization and power usage.
fr: 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.

note: type: SS
en: Signals
fr: Signaux

note: type: Plain text
en: When writing onto a connection-oriented socket that has been shut down (by the local or the remote end)  B<SIGPIPE> is sent to the writing process and B<EPIPE> is returned.  The signal is not sent when the write call specified the B<MSG_NOSIGNAL> flag.
fr: Lors de l'écriture sur une socket orientée connexion qui a été fermée (localement ou à l'autre extrémité), le signal B<SIGPIPE> est envoyé au processus qui écrivait, et B<EPIPE> est renvoyé. Le signal n'est pas envoyé lorsque l'appel d'écriture indiqué contenait l'attribut B<MSG_NOSIGNAL>.

note: type: Plain text
en: When requested with the B<FIOSETOWN> B<fcntl>(2)  or B<SIOCSPGRP> B<ioctl>(2), B<SIGIO> is sent when an I/O event occurs.  It is possible to use B<poll>(2)  or B<select>(2)  in the signal handler to find out which socket the event occurred on.  An alternative (in Linux 2.2) is to set a real-time signal using the B<F_SETSIG> B<fcntl>(2); the handler of the real time signal will be called with the file descriptor in the I<si_fd> field of its I<siginfo_t>.  See B<fcntl>(2)  for more information.
fr: Lorsque demandé avec l'option B<FIOSETOWN> de B<fcntl>(2) ou l'option B<SIOCSPGRP> de B<ioctl>(2), le signal B<SIGIO> est envoyé quand un événement d'entrée-sortie a lieu. Il est possible d'utiliser B<poll>(2) ou B<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 B<fnctl>(2) B<F_SETSIG>. Le gestionnaire du signal en temps-réel sera appelé avec le descripteur de fichier dans le champ I<si_fd> de I<siginfo_t>. Consultez B<fcntl>(2) pour plus d'informations.

note: .SS Ancillary messages type: Plain text
en: Under some circumstances (e.g., multiple processes accessing a single socket), the condition that caused the B<SIGIO> may have already disappeared when the process reacts to the signal.  If this happens, the process should wait again because Linux will resend the signal later.
fr: Dans certains cas (par exemple, différents processus accédant à la même socket), la condition ayant déclenché le signal B<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.

note: type: SS
en: /proc interfaces
fr: Interfaces /proc

note: type: Plain text
en: The core socket networking parameters can be accessed via files in the directory I</proc/sys/net/core/>.
fr: Les paramètres réseau de base des sockets sont accessibles en utilisant les fichiers du répertoire I</proc/sys/net/core/>.

note: type: Plain text
en: contains the default setting in bytes of the socket receive buffer.
fr: contient la taille en octets par défaut du tampon de réception.

note: type: Plain text
en: contains the maximum socket receive buffer size in bytes which a user may set by using the B<SO_RCVBUF> socket option.
fr: contient la taille maximale en octets du tampon de réception qu'un utilisateur peut définir avec l'option B<SO_RCVBUF> de la socket.

note: type: Plain text
en: contains the default setting in bytes of the socket send buffer.
fr: contient la taille en octets par défaut du tampon d'émission de la socket.

note: type: Plain text
en: contains the maximum socket send buffer size in bytes which a user may set by using the B<SO_SNDBUF> socket option.
fr: contient la taille maximale en octets du tampon d'émission qu'un utilisateur peut définir avec l'option B<SO_SNDBUF> de la socket.

note: type: TP
en: I<message_cost> and I<message_burst>
fr: I<message_cost> et I<message_burst>

note: type: Plain text
en: configure the token bucket filter used to load limit warning messages caused by external network events.
fr: configurent le filtrage par jeton utilisé pour limiter la charge des messages d'avertissement dus aux événements réseau extérieurs.

note: type: Plain text
en: Maximum number of packets in the global input queue.
fr: contient le nombre maximal de paquets dans la file d'entrée globale.

note: netdev_fastroute is not documented because it is experimental type: Plain text
en: Maximum length of ancillary data and user control data like the iovecs per socket.
fr: contient la taille maximale par socket des données de service et des données de contrôle utilisateur comme les iovecs.

note: type: Plain text
en: These operations can be accessed using B<ioctl>(2):
fr: Ces opérations sont accessibles en utilisant B<ioctl>(2)\ :

note: type: Plain text
en: I<error>B< = ioctl(>I<ip_socket>B<, >I<ioctl_type>B<, >I<&value_result>B<);>
fr: I<error>B< = ioctl(>I<ip_socket>B<, >I<type_ioctl>B<, >I<&valeur_résultat>B<);>

note: type: Plain text
en: Return a I<struct timeval> with the receive timestamp of the last packet passed to the user.  This is useful for accurate round trip time measurements.  See B<setitimer>(2)  for a description of I<struct timeval>.  This ioctl should be used only if the socket option B<SO_TIMESTAMP> is not set on the socket.  Otherwise, it returns the timestamp of the last packet that was received while B<SO_TIMESTAMP> was not set, or it fails if no such packet has been received, (i.e., B<ioctl>(2)  returns -1 with I<errno> set to B<ENOENT>).
fr: Renvoie une structure I<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 B<setitimer>(2) pour une description de la structure I<timeval>. L'ioctl ne doit être utilisé que si l'option B<SO_TIMESTAMP> de la socket n'est pas définie. Sinon, la date du dernier paquet reçu quand B<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 B<ioctl>(2) renvoie -1 avec un I<errno> défini à B<ENOENT>).

note: type: Plain text
en: Set the process or process group to send B<SIGIO> or B<SIGURG> signals to when an asynchronous I/O operation has finished or urgent data is available.  The argument is a pointer to a I<pid_t>.  If the argument is positive, send the signals to that process.  If the argument is negative, send the signals to the process group with the ID of the absolute value of the argument.  The process may only choose itself or its own process group to receive signals unless it has the B<CAP_KILL> capability or an effective UID of 0.
fr: Définit le processus ou le groupe de processus à qui envoyer les signaux B<SIGIO> ou B<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 I<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é B<CAP_KILL> ou un identifiant d'utilisateur effectif nul.

note: type: Plain text
en: Change the B<O_ASYNC> flag to enable or disable asynchronous I/O mode of the socket.  Asynchronous I/O mode means that the B<SIGIO> signal or the signal set with B<F_SETSIG> is raised when a new I/O event occurs.
fr: Change l'attribut B<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 B<SIGIO> ou le signal défini avec B<F_SETSIG> est envoyé quand un événement d'entrée-sortie se produit.

note: type: Plain text
en: Argument is an integer boolean flag.  (This operation is synonymous with the use of B<fcntl>(2)  to set the B<O_ASYNC> flag.)
fr: Le paramètre est un booléen entier. (Cette opération est synonyme de l'utilisation de B<fcntl>(2) pour définir l'attribut B<O_ASYNC>).

note: type: Plain text
en: Get the current process or process group that receives B<SIGIO> or B<SIGURG> signals, or 0 when none is set.
fr: Lit le processus ou le groupe de processus auquel les signaux B<SIGIO> ou B<SIGURG> sont envoyés. Zéro est obtenu quand aucun n'est défini.

note: type: Plain text
en: Valid B<fcntl>(2)  operations:
fr: Opérations B<fcntl>(2) valables\ :

note: type: Plain text
en: The same as the B<SIOCGPGRP> B<ioctl>(2).
fr: Identique à l'B<ioctl>(2) B<SIOCGPGRP>.

note: type: Plain text
en: The same as the B<SIOCSPGRP> B<ioctl>(2).
fr: Identique à l'B<ioctl>(2) B<SIOCSPGRP>.

note: type: Plain text
en: B<SO_BINDTODEVICE> was introduced in Linux 2.0.30.  B<SO_PASSCRED> is new in Linux 2.2.  The I</proc> interfaces was introduced in Linux 2.2.  B<SO_RCVTIMEO> and B<SO_SNDTIMEO> are supported since Linux 2.3.41.  Earlier, timeouts were fixed to a protocol-specific setting, and could not be read or written.
fr: B<SO_BINDTODEVICE> a été introduit dans Linux 2.0.30. B<SO_PASSCRED> est une nouveauté de Linux 2.2. Les interfaces I</proc> ont été introduites dans Linux 2.2. B<SO_RCVTIMEO> et B<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.

note: type: Plain text
en: Linux assumes that half of the send/receive buffer is used for internal kernel structures; thus the values in the corresponding I</proc> files are twice what can be observed on the wire.
fr: 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 I</proc> correspondants sont deux fois plus grandes que ce que l'on peut observer directement sur le câble.

note: type: Plain text
en: Linux will only allow port reuse with the B<SO_REUSEADDR> option when this option was set both in the previous program that performed a B<bind>(2)  to the port and in the program that wants to reuse the port.  This differs from some implementations (e.g., FreeBSD)  where only the later program needs to set the B<SO_REUSEADDR> option.  Typically this difference is invisible, since, for example, a server program is designed to always set this option.
fr: Linux ne permettra la réutilisation des ports qu'avec l'option B<SO_REUSEADDR> lorsque celle-ci sera définie à la fois par le précédent programme qui a effectué un B<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 B<SO_REUSEADDR>. Habituellement, cette différence est invisible, puisque, par exemple, un programme serveur est conçu pour toujours définir cette option.

note: FIXME Document SO_ATTACH_FILTER and SO_DETACH_FILTER .SH AUTHORS This man page was written by Andi Kleen. type: Plain text
en: The B<CONFIG_FILTER> socket options B<SO_ATTACH_FILTER> and B<SO_DETACH_FILTER> are not documented.  The suggested interface to use them is via the libpcap library.
fr: Des options B<CONFIG_FILTER> de socket, B<SO_ATTACH_FILTER> et B<SO_DETACH_FILTER>, ne sont pas documentées. Pour les utiliser, il est conseillé d'utiliser la bibliothèque libpcap.

note: type: TH
en: 2012-10-16
fr: 16 octobre 2012

note: type: Plain text
en: socketcall - socket system calls
fr: socketcall - Appels système sur les sockets

note: type: Plain text
en: B<socketcall>()  is a common kernel entry point for the socket system calls.  I<call> determines which socket function to invoke.  I<args> points to a block containing the actual arguments, which are passed through to the appropriate call.
fr: B<socketcall>() est un point d'entrée commun du noyau pour les appels système concernant les sockets. I<call> détermine quelle fonction appliquer aux sockets. I<args> pointe sur un bloc contenant les véritables arguments qui sont transmis à l'appel système approprié.

note: type: Plain text
en: User programs should call the appropriate functions by their usual names.  Only standard library implementors and kernel hackers need to know about B<socketcall>().
fr: Les programmes utilisateurs doivent appeler les fonctions appropriées par leurs noms habituels. Seul les implémenteurs de bibliothèques standards et les hackers Linux ont besoin d'utiliser B<socketcall>().

note: type: Plain text
en: This call is specific to Linux, and should not be used in programs intended to be portable.
fr: Cet appel système est spécifique à Linux et ne devrait pas être employé dans des programmes destinés à être portables.

note: type: Plain text
en: On a some architectures\(emfor example, x86-64 and ARM\(emthere is no B<socketcall>()  system call; instead B<socket>(2), B<accept>(2), B<bind>(2), and so on really are implemented as separate system calls.
fr: Sur certaines architectures\(empar exemple x86-64 et ARM\(em il n'y a pas d'appel système B<socketcall>()\ ; les fonctions B<socket>(2), B<accept>(2), B<bind>(2) et autres y sont donc vraiment implémentées comme des appels système distincts.

note: type: TH
en: 2008-10-11
fr: 11 octobre 2008

note: type: Plain text
en: socketpair - create a pair of connected sockets
fr: socketpair - Créer une paire de sockets connectées

note: type: Plain text
en: The B<socketpair>()  call creates an unnamed pair of connected sockets in the specified I<domain>, of the specified I<type>, and using the optionally specified I<protocol>.  For further details of these arguments, see B<socket>(2).
fr: La fonction B<socketpair>() crée une paire de sockets connectées, sans noms, dans le domaine de communication I<domain>, du I<type> indiqué, en utilisant le protocole optionnel I<protocol>. Pour plus de détails sur ces paramètres, consultez B<socket>(2).

note: type: Plain text
en: The descriptors used in referencing the new sockets are returned in I<sv>[0] and I<sv>[1].  The two sockets are indistinguishable.
fr: Les descripteurs correspondant aux deux sockets sont placés dans I<sv>[0] et I<sv>[1]. Les deux sockets ne sont pas différenciables.

note: type: Plain text
en: The specified address family is not supported on this machine.
fr: La famille de communication n'est pas supportée sur cette machine.

note: type: Plain text
en: The address I<sv> does not specify a valid part of the process address space.
fr: I<sv> pointe en dehors de l'espace d'adressage accessible.

note: type: Plain text
en: Too many descriptors are in use by this process.
fr: Trop de descripteurs de fichier utilisés par le processus en cours.

note: type: Plain text
en: The specified protocol does not support creation of socket pairs.
fr: La protocole de communication mentionné ne permet pas la création d'une paire de sockets.

note: type: Plain text
en: The specified protocol is not supported on this machine.
fr: La protocole de communication n'est pas supportée sur cette machine.

note: type: Plain text
en: 4.4BSD, POSIX.1-2001.  The B<socketpair>()  function call appeared in 4.2BSD.  It is generally portable to/from non-BSD systems supporting clones of the BSD socket layer (including System V variants).
fr: BSD\ 4.4, POSIX.1-2001. La fonction B<socketpair>() est apparue dans BSD\ 4.2. Elle est généralement portable de/vers les systèmes non-BSD supportant les clones des sockets BSD (y compris les variantes de System V).

note: type: Plain text
en: On Linux, the only supported domain for this call is B<AF_UNIX> (or synonymously, B<AF_LOCAL>).  (Most implementations have the same restriction.)
fr: Sous Linux, le seul domaine supportant cet appel est B<AF_UNIX> (ou le synonyme, B<AF_LOCAL>). (La plupart des implémentations ont la même restriction).

note: type: Plain text
en: Since Linux 2.6.27, B<socketpair>()  supports the B<SOCK_NONBLOCK> and B<SOCK_CLOEXEC> flags described in B<socket>(2).
fr: Depuis Linux 2.6.27, B<socketpair>() prend en charge les attributs B<SOCK_NONBLOCK> et B<SOCK_CLOEXEC> décrits dans B<socket>(2).
