Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
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 systeme send(), sendto() et sendmsg() permettent de
transmettre un message a destination d'une autre socket.
L'appel send() ne peut etre utilise qu'avec les sockets connect'ees
(ainsi, le destinataire vise est connu). La seule difference entre
send() et write(2) est la presence de flags. Si flags est nul, send()
est equivalent a write(2). De plus l'appel suivant :
send(sockfd, buf, len, flags);
est equivalent a :
sendto(sockfd, buf, len, flags, NULL, 0);
Le parametre sockfd est le descripteur de fichier de la socket
emettrice.
Si sendto() est utilisee sur une socket en mode connexion (SOCK_STREAM,
SOCK_SEQPACKET), les parametres dest_addr et addrlen sont ignores (et
l'erreur EISCONN peut etre retournee s'il n'y pas NULL ou 0), et
l'erreur ENOTCONN est retournee lorsque la socket n'est pas vraiment
connectee. Autrement, l'adresse de la cible est fournie par dest_addr,
addrlen specifiant sa taille. Pour sendmsg(), l'adresse de la cible est
fournie par msg.msg_name, msg.msg_namelen specifiant sa taille.
Pour send() et sendto(), le message se trouve dans buf et a pour
longueur len. Pour sendmsg(), le message est pointe par les elements du
tableau msg.msg_iov. L'appel sendmsg() permet egalement l'envoi de
metadonnees (egalement appelees donnees de controle).
Si le message est trop long pour etre transmis integralement par le
protocole sous-jacent, l'erreur EMSGSIZE sera declenchee et rien ne
sera emis.
Aucune indication d'echec de distribution n'est fournie par send().
Seules les erreurs locales sont detectees, et indiquees par une valeur
de retour -1.
Si la socket ne dispose pas de la place suffisante pour le message,
alors send() va bloquer, a moins que la socket ait ete configuree en
mode d'entrees-sorties non bloquantes auquel cas elle echouera avec
l'erreur EAGAIN ou EWOULDBLOCK. On peut utiliser l'appel systeme
select(2) pour verifier s'il est possible d'emettre des donnees.
Le parametre flags est un OU bit a bit de zero ou plusieurs des options
suivantes :
MSG_CONFIRM (Depuis Linux 2.3.15)
Indiquer a la couche liaison qu'une reponse correcte a ete recue
du correspondant. Si la couche de liaison n'a pas cette
confirmation, elle va reinterroger regulierement le voisinage
(par exemple avec un ARP unicast). Seulement valide pour les
sockets SOCK_DGRAM et SOCK_RAW et uniquement implemente pour
IPv4 et IPv6. Consultez arp(7) pour plus de details.
MSG_DONTROUTE
Ne pas utiliser de passerelle pour transmettre le paquet,
n'envoyer de donnees que vers les hotes sur des reseaux
directement connectes. Ceci n'est normalement employe que par
les programmes de diagnostic ou de routage. Cette option n'est
definie que pour les familles de protocoles employant le
routage, pas les sockets par paquets.
MSG_DONTWAIT (depuis Linux 2.2)
Activer les operations non bloquantes. Si l'operation devait
bloquer, EAGAIN ou EWOULDBLOCK sera renvoye (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 supportee,
comme pour les sockets de type SOCK_SEQPACKET).
MSG_MORE (Depuis Linux 2.4.4)
L'appelant a d'autres donnees a envoyer. Cet attribut est
utilise avec les sockets TCP pour obtenir le meme comportement
qu'avec l'option socket TCP_CORK (consultez tcp(7)), a la
difference que cet attribut peut etre positionne par appel.
Depuis Linux 2.6, cet attribut est egalement gere pour les
sockets UDP et demande au noyau d'empaqueter toutes les donnees
envoyees dans des appels avec cet attribut positionne dans un
seul datagramme qui ne sera transmis que quand un appel sera
effectue 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 connectees lorsque le correspondant coupe la connexion.
L'erreur EPIPE est toutefois renvoyee.
MSG_OOB
est utilisee pour emettre des donnees hors-bande sur une socket
qui l'autorise (par exemple de type SOCK_STREAM). Le protocole
sous-jacent doit egalement autoriser l'emission de donnees hors-
bande.
La definition 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; /* # elements dans msg_iov */
void *msg_control; /* metadonnees, voir ci-dessous */
size_t msg_controllen; /* taille du tampon de metadonnees */
int msg_flags; /* attributs du message recu */
};
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 gerer est limite par socket par la valeur
de /proc/sys/net/core/optmem_max. Consultez socket(7).
VALEUR RENVOY'EE
En cas d'envoi reussi, ces fonctions renvoient le nombre de caracteres
envoyes. En cas d'erreur, -1 est renvoye, et errno contient le code
d'erreur.
ERREURS
Voici les erreurs standards engendrees par la couche socket. Des
erreurs supplementaires peuvent etre declenchees par les protocoles
sous-jacents. Consultez leurs pages de manuel respectives.
EACCES (Pour les sockets de domaine Unix qui sont identifiees par un
nom de chemin) La permission d'ecriture est refusee sur le
fichier socket de destination ou la permission de parcours est
refusee pour un des repertoires du chemin (consultez
path_resolution(7)).
EAGAIN ou EWOULDBLOCK
La socket est non bloquante et l'operation demandee devrait etre
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
meme valeur. Une application portable devrait donc tester les
deux possibilites.
EBADF Descripteur de socket invalide.
ECONNRESET
Connexion reinitialisee par le correspondant.
EDESTADDRREQ
La socket n'est pas en mode connexion et aucune adresse de
correspondant n'a ete positionnee.
EFAULT Un parametre pointe en dehors de l'espace d'adressage
accessible.
EINTR Un signal a ete recu avant que la moindre donnee n'ait ete
transmise ; voir signal(7).
EINVAL Un parametre non valable a ete fourni.
EISCONN
La socket en mode connexion est deja connectee mais un
destinataire a ete specifie. (Maintenant, soit cette erreur est
retournee, soit la specification du destinataire est ignoree.)
EMSGSIZE
Le type de socket necessite une emission integrale du message
mais la taille de celui-ci ne le permet pas.
ENOBUFS
La file d'emission de l'interface reseau est pleine. Ceci
indique generalement une panne de l'interface reseau, mais peut
egalement etre du a un engorgement passager. Ceci ne doit pas se
produire sous Linux, les paquets sont silencieusement elimines.
ENOMEM Pas assez de memoire pour le noyau.
ENOTCONN
La socket n'est pas connectee et aucune cible n'a ete fournie.
ENOTSOCK
Le parametre sockfd n'est pas une socket.
EOPNOTSUPP
Au moins un bit de l'argument flags n'est pas approprie pour le
type de socket.
EPIPE L'ecriture a ete terminee du cote local sur une socket orientee
connexion. Dans ce cas, le processus recevra egalement un signal
SIGPIPE sauf s'il a active l'option MSG_NOSIGNAL.
CONFORMIT'E
BSD 4.4, SVr4, POSIX.1-2001. Ces appels systeme sont apparus dans
BSD 4.2.
POSIX.1-2001 decrit seulement les drapeaux MSG_OOB et MSG_EOR. Le
drapeau MSG_CONFIRM est une extension Linux.
NOTES
Les prototypes fournis plus haut suivent les Specifications Single
Unix, tout comme glibc2. L'argument flags etait un int dans BSD 4.x,
mais unsigned int dans libc4 et libc5. L'argument len etait un int dans
BSD 4.x et libc4, mais un size_t dans libc5; Le parametre addrlen etait
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 etre de type socklen_t, mais il a actuellement le type size_t
dans la glibc.
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), 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.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Julien
Cristau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.
Linux 29 aout 2010 SEND(2)