Provided by:
manpages-fr_1.67.0-1_all 
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.