focal (2) sendto.2.gz

Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       send, sendto, sendmsg - Envoyer un message sur une socket

SYNOPSIS

       #include <sys/types.h>
       #include <sys/socket.h>

       ssize_t send(int sockfd, const void *buf, size_t len, int flags);

       ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
                      const struct sockaddr *dest_addr, socklen_t addrlen);

       ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);

DESCRIPTION

       Les appels système send(), sendto() et sendmsg() permettent de transmettre un message à destination d'une
       autre socket.

       L'appel send() ne peut être utilisé qu'avec les sockets  connectées  (ainsi,  le  destinataire  visé  est
       connu).  La  seule différence entre send() et write(2) est la présence de flags. Si flags est nul, send()
       est équivalent à write(2). De plus l'appel suivant :

           send(sockfd, buf, len, flags);

       est équivalent à :

           sendto(sockfd, buf, len, flags, NULL, 0);

       Le paramètre sockfd est le descripteur de fichier de la socket émettrice.

       Si sendto() est utilisée sur une socket en mode connexion (SOCK_STREAM, SOCK_SEQPACKET),  les  paramètres
       dest_addr  et  addrlen  sont ignorés (et l'erreur EISCONN peut être retournée s'il n'y pas NULL ou 0), et
       l'erreur ENOTCONN est retournée lorsque la socket n'est pas vraiment connectée. Autrement,  l'adresse  de
       la  cible  est fournie par dest_addr, addrlen spécifiant sa taille. Pour sendmsg(), l'adresse de la cible
       est fournie par msg.msg_name, msg.msg_namelen spécifiant sa taille.

       Pour send() et sendto(), le message se trouve dans buf et a pour longueur len. Pour sendmsg(), le message
       est  pointé  par  les  éléments  du  tableau  msg.msg_iov.  L'appel sendmsg() permet également l'envoi de
       métadonnées (également appelées données de contrôle).

       Si le message est trop long pour être transmis  intégralement  par  le  protocole  sous‐jacent,  l'erreur
       EMSGSIZE sera déclenchée et rien ne sera émis.

       Aucune  indication  d'échec  de  distribution  n'est  fournie par send(). Seules les erreurs locales sont
       détectées, et indiquées par une valeur de retour -1.

       Si la socket ne dispose pas de la place suffisante pour le message, alors 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 EAGAIN ou EWOULDBLOCK. On peut  utiliser  l'appel  système  select(2)  pour  vérifier  s'il  est
       possible d'émettre des données.

       Le paramètre flags est un OU bit à bit de zéro ou plusieurs des options suivantes :

       MSG_CONFIRM (depuis Linux 2.3.15)
              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 SOCK_DGRAM et SOCK_RAW et uniquement
              implémenté pour IPv4 et IPv6. Consultez arp(7) pour plus de détails.

       MSG_DONTROUTE
              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.

       MSG_DONTWAIT (depuis Linux 2.2)
              Activer  les  opérations non bloquantes. Si l'opération devait bloquer, EAGAIN ou EWOULDBLOCK sera
              renvoyé (on peut aussi activer ce comportement avec l'option O_NONBLOCK de la fonction F_SETFL  de
              fcntl(2)).

       MSG_EOR (depuis Linux 2.2)
              Termine  un  enregistrement  (lorsque  cette  notion est supportée, comme pour les sockets de type
              SOCK_SEQPACKET).

       MSG_MORE (depuis Linux 2.4.4)
              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 TCP_CORK (consultez tcp(7)), à la différence
              que cet attribut peut être positionné par appel.

              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 UDP_CORK dans udp(7).

       MSG_NOSIGNAL (depuis Linux 2.2)
              Demande  de  ne  pas  envoyer  de  signal  SIGPIPE  d'erreur sur les sockets connectées lorsque le
              correspondant coupe la connexion. L'erreur EPIPE est toutefois renvoyée.

       MSG_OOB
              est utilisée pour émettre des données hors‐bande sur une socket qui  l'autorise  (par  exemple  de
              type  SOCK_STREAM).  Le protocole sous‐jacent doit également autoriser l'émission de données hors‐
              bande.

       La définition de la structure msghdr se trouve ci-dessous. Consultez recv(2) pour une description  exacte
       de ses champs.

           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‐dessous */
               size_t        msg_controllen; /* taille du tampon de métadonnées */
               int           msg_flags;      /* attributs du message reçu */
           };

       On  peut  transmettre des informations de service en employant les membres msg_control et msg_controllen.
       La longueur maximale du tampon de service que le noyau peut gérer est limité par socket par la valeur  de
       /proc/sys/net/core/optmem_max. Consultez socket(7).

VALEUR RENVOYÉE

       En  cas  d'envoi  réussi,  ces  fonctions  renvoient  le nombre d'octets envoyés. En cas d'erreur, -1 est
       renvoyé, et errno contient le code d'erreur.

ERREURS

       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.

       EACCES (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 path_resolution(7)).

              (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.

       EAGAIN ou EWOULDBLOCK
              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.

       EBADF  Descripteur de socket invalide.

       ECONNRESET
              Connexion réinitialisée par le correspondant.

       EDESTADDRREQ
              La socket n'est pas en mode connexion et aucune adresse de correspondant n'a été positionnée.

       EFAULT Un paramètre pointe en dehors de l'espace d'adressage accessible.

       EINTR  Un signal a été reçu avant que la moindre donnée n'ait été transmise ; voir signal(7).

       EINVAL Un paramètre non valable a été fourni.

       EISCONN
              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.)

       EMSGSIZE
              Le  type  de  socket  nécessite une émission intégrale du message mais la taille de celui-ci ne le
              permet pas.

       ENOBUFS
              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.

       ENOMEM Pas assez de mémoire pour le noyau.

       ENOTCONN
              La socket n'est pas connectée et aucune cible n'a été fournie.

       ENOTSOCK
              Le paramètre sockfd n'est pas une socket.

       EOPNOTSUPP
              Au moins un bit de l'argument flags n'est pas approprié pour le type de socket.

       EPIPE  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 SIGPIPE sauf s'il a activé l'option MSG_NOSIGNAL.

CONFORMITÉ

       BSD 4.4, SVr4, POSIX.1-2001. Ces appels système sont apparus dans BSD 4.2.

       POSIX.1-2001  décrit  seulement  les drapeaux MSG_OOB et MSG_EOR. POSIX.1-2008 ajoute la spécification de
       MSG_NOSIGNAL. Le drapeau MSG_CONFIRM est une extension Linux.

NOTES

       Les prototypes fournis plus haut suivent les Spécifications Single UNIX, tout  comme  glibc2.  L'argument
       flags  était un int dans BSD 4.x, mais unsigned int dans libc4 et libc5. L'argument len était un int dans
       BSD 4.x et libc4, mais un size_t dans libc5; Le paramètre addrlen était un int  dans  BSD 4.x,  libc4  et
       libc5. Consultez aussi les notes accompagnant la page accept(2).

       Selon  POSIX.1-2001,  le champ msg_controllen de la structure msghdr devrait être de type socklen_t, mais
       il a actuellement le type size_t dans la glibc.

       Consultez 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.

BOGUES

       Linux peut retourner EPIPE au lieu de ENOTCONN.

EXEMPLE

       Un exemple d'utilisation de sendto() se trouve dans la page de manuel de getaddrinfo(3).

VOIR AUSSI

       fcntl(2),  getsockopt(2), recv(2), select(2), sendfile(2), sendmmsg(2), shutdown(2), socket(2), write(2),
       cmsg(3), ip(7), socket(7), tcp(7), udp(7)

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des
       instructions     pour     signaler     des     anomalies    peuvent    être    trouvées    à    l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

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

       Christophe       Blaess       <http://www.blaess.fr/christophe/>      (1996-2003),      Alain      Portal
       <http://manpagesfr.free.fr/> (2003-2006).  Julien  Cristau  et  l'équipe  francophone  de  traduction  de
       Debian (2006-2009).

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

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