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, int len , unsigned int flags);

int sendto(int s, const void *msg, int len unsigned int flags, const struct sockaddr *to, int tolen);

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

DESCRIPTION
Send, sendto, et sendmsg permettent de transmettre un message a destination d'une autre socket. Send ne peut etre utilise qu'avec les sockets connectee alors que sendto et sendmsg peuvent etre utilises tout le temps. L'adresse de la cible est donnee par to avec la longueur tolen. la longueur du message est indiquee dans len. Si le message est trop long pour etre transmis integralement au 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. On peut utiliser l'appel systeme select(2) pour verifier s'il est possible d'emettre des donnees. le parametre flags peut contenir une ou plusieurs des options suivantes
#define	MSG_OOB        0x1  /* Traiter les donnees hors-bande */
#define	MSG_DONTROUTE  0x4  /* Contourner le routage           */
L'option MSG_OOB est utilisee pour emettre des donnees hors-bande sur une socket qui l'autorise (par ex : SOCK_STREAM). Le protocole sous-jacent doit egalement autoriser l'emission de donnees hors-bande. MSG_DONTROUTE est utilisee par les programmes de diagnostique ou de routage. Voir recv(2) pour une description de la structure msghdr.

VALEUR RENVOYEE
les appels systemes retournent le nombre de caracteres emis, ou -1 s'ils echouent, 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 parametre pointe en dehors de l'espace d'adresssage accessible

EMSGSIZE
    La socket necessite une emission integrale du message mais la taille de celui-ci ne le permet pas.

EWOULDBLOCK
    La socket est non-bloquante et l'operation demandee bloquerait.

EPIPE
    L'ecriture est impossible (correspondant absent), et le signal SIGPIPE a ete ignore par le processus.

ENOMEM
    Pas assez de memoire pour le noyau.

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.

CONFORMITE
BSD 4.4 (cet appel systeme est apparu dans BSD 4.2), SVr4. La version SVr4 fournit les conditions d'erreur supplementaires EINVAL, EINTR, EMSGSIZE, ENOSR, et ENOMEM.

VOIR AUSSI
fcntl(2), recv(2), select(2), getsockopt(2), socket(2), write(2)