SEND(2) Manuel du programmeur Linux SEND(2)
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 *msg, size_t len, int flags)
int sendto(int s, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen);
int sendmsg(int s, const struct msghdr *msg, int flags);
DESCRIPTION
Send, sendto, et sendmsg permettent de transmettre un mes
sage à destination d'une autre socket. Send ne peut être
utilisé qu'avec les sockets connectée alors que sendto et
sendmsg peuvent être utilisés tout le temps.
L'adresse de la cible est donnée par to avec la longueur
tolen. la longueur du message est indiquée dans len. 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.
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 peut contenir une ou plusieurs des
options suivantes
#define MSG_OOB 0x1 /* Traiter les données hors-bande */
#define MSG_DONTROUTE 0x4 /* Contourner le routage */
L'option MSG_OOB est utilisée pour émettre des données
hors-bande sur une socket qui l'autorise (par ex :
SOCK_STREAM). Le protocole sous-jacent doit également
autoriser l'émission de données hors-bande.
MSG_DONTROUTE est utilisée par les programmes de diagnos
tique ou de routage.
Voir recv(2) pour une description de la structure msghdr.
Linux 18 Mai 1999 1
SEND(2) Manuel du programmeur Linux SEND(2)
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
EBADF Descripteur de socket invalide.
ENOTSOCK
L'argument s n'est pas une socket.
EFAULT Un paramètre pointe en dehors de l'espace
d'adresssage accessible.
EMSGSIZE
La socket nécessite une emission intégrale du mes
sage mais la taille de celui-ci ne le permet pas.
EWOULDBLOCK
La socket est non-bloquante et l'opération
demandée bloquerait.
EPIPE L'écriture est impossible (correspondant absent),
et le signal SIGPIPE a été ignoré par le proces
sus.
ENOMEM Pas assez de mémoire pour le noyau.
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.
CONFORMITÉ
BSD 4.4 (cet appel système est apparu dans BSD 4.2), SVr4.
La version SVr4 fournit les conditions d'erreur supplémen
taires EINVAL, EINTR, EMSGSIZE, ENOSR, et ENOMEM. L'appel
sendmsg est apparu dans le noyau Linux 1.3.16.
NOTE
Les prototypes founis plus haut suivent les Spécification
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).
VOIR AUSSI
fcntl(2), recv(2), select(2), getsockopt(2), socket(2),
write(2)
Linux 18 Mai 1999 2
SEND(2) Manuel du programmeur Linux SEND(2)
TRADUCTION
Christophe Blaess, 1997.
Linux 18 Mai 1999 3