Provided by: manpages-fr-dev_3.65d1p1-1_all bug

NOM

       sendmmsg - Envoyer plusieurs message sur une socket

SYNOPSIS

       #define _GNU_SOURCE
       #include <sys/socket.h>

       int sendmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen,
                    unsigned int flags);

DESCRIPTION

       L'appel  système  sendmmsg()  est  une  extension  de  sendmsg(2)  qui permet à l'appelant de transmettre
       plusieurs messages sur une socket en utilisant un seul appel système.  (Cela  améliore  les  performances
       pour certaines applications.)

       Le paramètre sockfd est le descripteur de fichier de la socket destinataire.

       L'argument  msgvec  est  un  pointeur  vers un tableau de structures mmsghdr. La taille de ce tableau est
       précisée dans vlen.

       La structure mmsghdr est définie dans <sys/socket.h> comme ceci :

           struct mmsghdr {
               struct msghdr msg_hdr;  /* En-tête du message  */
               unsigned int  msg_len;  /* Nombre d'octets transmis */
           };

       Le champ msg_hdr est une structure  msghdr, conformément à sendmsg(2). Le champ  msg_len  est  le  nombre
       d'octets  du  message dans msg_hdr qui ont été envoyés. Ce champ a la même valeur que la valeur de retour
       de la simple commande sendmsg(2).

       L'argument flags contient le OU  binaire  de  la  collection  des  attributs.  Les  attributs  sont  ceux
       documentés pour sendmsg(2).

       Un appel bloquant sendmmsg() bloque jusqu'à ce que vlen messages aient été envoyés. Un appel non bloquant
       envoie autant de messages que possible (jusqu'à la limite indiquée par vlen) et retourne immédiatement.

       Au retour de sendmmsg(), les champs msg_len des éléments successifs  de  msgvec  sont  mis  à  jour  pour
       contenir  le  nombre  d'octets  transmis  depuis le msg_hdr correspondant. La valeur de retour de l'appel
       indique le nombre d'éléments de msgvec mis à jour.

VALEUR RENVOYÉE

       En cas du succès, sendmmsg() retourne le nombre de messages envoyés depuis  msgvec ;  Si  ce  nombre  est
       strictement  inférieur à vlen, l'appelant peut réessayer avec un nouvel appel sendmmsg() pour envoyer les
       messages restants.

       En cas d'erreur, -1 est renvoyé et errno est définie pour préciser l'erreur.

ERREURS

       Les erreurs sont les mêmes que pour sendmsg(2). Une erreur n'est retournée seulement si aucun  datagramme
       n'a pu être envoyé.

VERSIONS

       L'appel  système  sendmmsg()  a été ajouté dans Linux 3.0. La prise en charge dans la glibc a été ajoutée
       dans la version 2.14.

CONFORMITÉ

       sendmmsg() est spécifique à Linux.

NOTES

       La valeur indiquée dans vlen ne peut pas dépasser UIO_MAXIOV (1024).

EXEMPLE

       L'exemple ci-dessous utilise sendmmsg() pour envoyer undeux et trois dans deux datagrammes UDP  distincts
       en  utilisant  un  seul  appel  système. Les contenus des premiers datagrammes proviennent d'une paire de
       tampons.

       #define _GNU_SOURCE
       #include <netinet/ip.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>
       #include <sys/types.h>
       #include <sys/socket.h>

       int
       main(void)
       {
           int sockfd;
           struct sockaddr_in sa;
           struct mmsghdr msg[2];
           struct iovec msg1[2], msg2;
           int resultat;

           sockfd = socket(AF_INET, SOCK_DGRAM, 0);
           if (sockfd == -1) {
               perror("socket()");
               exit(EXIT_FAILURE);
           }

           sa.sin_family = AF_INET;
           sa.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
           sa.sin_port = htons(1234);
           if (connect(sockfd, (struct sockaddr *) &sa, sizeof(sa)) == -1) {
               perror("connect()");
               exit(EXIT_FAILURE);
           }

           memset(msg1, 0, sizeof(msg1));
           msg1[0].iov_base = "un";
           msg1[0].iov_len = 2;
           msg1[1].iov_base = "deux";
           msg1[1].iov_len = 4;

           memset(&msg2, 0, sizeof(msg2));
           msg2.iov_base = "trois";
           msg2.iov_len = 5;

           memset(msg, 0, sizeof(msg));
           msg[0].msg_hdr.msg_iov = msg1;
           msg[0].msg_hdr.msg_iovlen = 2;

           msg[1].msg_hdr.msg_iov = &msg2;
           msg[1].msg_hdr.msg_iovlen = 1;

           resultat = sendmmsg(sockfd, msg, 2, 0);
           if (resultat == -1)
               perror("sendmmsg()");
           else
               printf("%d messages envoyés\n", resultat);

           exit(0);
       }

VOIR AUSSI

       recvmmsg(2), sendmsg(2), socket(2), socket(7)

COLOPHON

       Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des
       instructions     pour     signaler     des     anomalies    peuvent    être    trouvées    à    l'adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par
       l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

       Veuillez  signaler  toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par
       un rapport de bogue sur le paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C
       <section> <page_de_man> ».