send | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
NOM | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
SYNOPSIS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
#include <sys/types.h> #include <sys/socket.h> ssize_t send(int s, const void *buf, size_t len, int flags); ssize_t sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); ssize_t sendmsg(int s, const struct msghdr *msg, int flags);
DESCRIPTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
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 :
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. (Voir aussi l'option socket UDP_CORK décrite dans udp(7).)
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 tampon 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 | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
ERREURS | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
CONFORMITÉ | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
POSIX.1-2001 décrit seulement les drapeaux MSG_OOB et MSG_EOR. Le drapeau MSG_CONFIRM est une extension Linux.
NOTES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Conformément à POSIX.1-2001, le champ msg_controllen de la structure msghdr devrait être typé socklen_t, mais la glibc actuelle (2.4) le type comme un size_t.
BOGUES | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
EXEMPLE | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
VOIR AUSSI | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
TRADUCTION | Début | Précédent | Suivant | Sommaire | Préc.page.lue | Accueil |
Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 15 octobre 1996 et révisée le 8 janvier 2008.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 send ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Sommaire | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
Table des mots clés | Début | Suivant | Sommaire | Préc.page.lue | Accueil |
EAGAIN ou EWOULDBLOCK | ERREURS |
EBADF | ERREURS |
ECONNRESET | ERREURS |
EDESTADDRREQ | ERREURS |
EFAULT | ERREURS |
EINTR | ERREURS |
EINVAL | ERREURS |
EISCONN | ERREURS |
EMSGSIZE | ERREURS |
ENOBUFS | ERREURS |
ENOMEM | ERREURS |
ENOTCONN | ERREURS |
ENOTSOCK | ERREURS |
EOPNOTSUPP | ERREURS |
EPIPE | ERREURS |
MSG_CONFIRM (Depuis Linux 2.3) | DESCRIPTION |
MSG_DONTROUTE | DESCRIPTION |
MSG_DONTWAIT | DESCRIPTION |
MSG_EOR | DESCRIPTION |
MSG_MORE (Depuis Linux 2.4.4) | DESCRIPTION |
MSG_NOSIGNAL | DESCRIPTION |
MSG_OOB | DESCRIPTION |