Provided by: manpages-fr_1.67.0-1_all bug

NOM

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

SYNOPSIS

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

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

       int  sendto(int s, const void *buf, size_t len, int flags, const struct
       sockaddr *to, socklen_t tolen);

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

DESCRIPTION

       Les appels systèmes 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 est la présence de
       flags.  Avec aucun  paramètre  flags,  send  est  équivalent  à  write.
       Également, send(s,buf,len) est équivalent à sendto(s,buf,len,NULL,0).

       Le paramètre s 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 to et tolen 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  actuellement
       connectée.  Autrement, l’adresse de la cible est fournie par to , tolen
       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ée
       (également connue comme donnée de contrôle).

       Si le message  est  trop  long  pour  être  transmis  intégralement  au
       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 renverra  EAGAIN.   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_OOB
              est  utilisée pour émettre des données hors-bande sur une socket
              qui l’autorise (par ex : de  type  SOCK_STREAM).   Le  protocole
              sous-jacent  doit  également  autoriser  l’émission  de  données
              hors-bande.

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

       MSG_DONTROUTE
              est  utilisé  pour empêcher la transmission d’un paquet vers une
              passerelle, n’envoyer de données que vers les hôtes  directement
              connectés au réseau.  Ceci n’est normalement employé que par les
              programmes de diagnostique 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
              active le mode non-bloquant. Une opération qui  devrait  bloquer
              renverra  EAGAIN  à la place (Cela peut être également paramétré
              avec l’option O_NONBLOCK de la fonction F_SETFL de fcntl(2)).

       MSG_NOSIGNAL
              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_CONFIRM (Depuis Linux 2.3)
              Indiquer à la couche de 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. Voir arp(7) pour plus de détails.

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

              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 */
                      socklen_t       msg_controllen; /* ancillary data buffer len */
                      int             msg_flags;      /* flags on received message */
              };

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

VALEUR RENVOYÉE

       Ces appels systèmes renvoient le nombre de caractères émis, ou -1 s’ils
       échouent, auquel cas 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.  Voir leurs pages de manuel respectives.

       EAGAIN ou EWOULDBLOCK
              La socket est non-bloquante et l’opération demandée  bloquerait.

       EBADF  Descripteur de socket invalide.

       ECONNRESET
              Connexion ré-initialisée par le pair.

       EDESTADDRREQ
              La  socket n’est pas en mode connexion et aucune adresse de pair
              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.

       EINVAL Un argument invalide a été transmis.

       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
              L’argument s 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 est impossible (correspondant absent). Dans  ce  cas,
              le  processus  recevra  également  un signal SIGPIPE sauf s’il a
              activée l’option MSG_NOSIGNAL.

CONFORMITÉ

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

       POSIX  décrit  seulement  les  drapeaux MSG_OOB et MSG_EOR.  Le drapeau
       MSG_CONFIRM est une extension Linux.

NOTE

       Les prototypes fournis plus  haut  suivent  les  Spécifications  Single
       Unix,  tout  comme  glibc2.  L’argument flags était un « int » dans BSD
       4.*, mais « unsigned int » dans libc4 et libc5.  L’argument  len  était
       un   « int »  dans  BSD  4.*  et  libc4, mais un « size_t » dans libc5;
       L’argument tolen était un « int » dans BSD 4.*, libc4 et  libc5.   Voir
       aussi les notes accompagnant la page accept(2).

BOGUES

       Linux peut retourner EPIPE au lieu de ENOTCONN.

VOIR AUSSI

       fcntl(2),  recv(2),  select(2),  getsockopt(2), sendfile(2), socket(2),
       write(2), socket(7), ip(7), tcp(7), udp(7)

TRADUCTION

       Christophe Blaess, 1996-2003.