.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2012 by Michael Kerrisk .\" with some material from a draft by .\" Stephan Mueller .\" in turn based on Andi Kleen's recvmmsg.2 page. .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH sendmmsg 2 "3 mai 2023" "Pages du manuel de Linux 6.05.01" .SH NOM sendmmsg \- Envoyer plusieurs messages sur un socket .SH BIBLIOTHÈQUE Bibliothèque C standard (\fIlibc\fP, \fI\-lc\fP) .SH SYNOPSIS .nf \fB#define _GNU_SOURCE\fP /* Consultez feature_test_macros(7) */ \fB#include \fP .PP \fBint sendmmsg(int \fP\fIsockfd\fP\fB, struct mmsghdr *\fP\fImsgvec\fP\fB, unsigned int \fP\fIvlen\fP\fB,\fP \fB int \fP\fIflags\fP\fB);\fP .fi .SH DESCRIPTION .\" See commit 228e548e602061b08ee8e8966f567c12aa079682 L'appel système \fBsendmmsg\fP() est une extension de \fBsendmsg\fP(2) qui permet à l'appelant de transmettre plusieurs messages sur un socket en utilisant un seul appel système. (Cela améliore les performances pour certaines applications.) .PP Le paramètre \fIsockfd\fP est le descripteur de fichier du socket destinataire. .PP L'argument \fImsgvec\fP est un pointeur vers un tableau de structures \fImmsghdr\fP. La taille de ce tableau est précisée dans \fIvlen\fP. .PP La structure \fImmsghdr\fP est définie dans \fI\fP comme ceci\ : .PP .in +4n .EX struct mmsghdr { struct msghdr msg_hdr; /* En\-tête du message */ unsigned int msg_len; /* Nombre d'octets transmis */ }; .EE .in .PP Le champ \fImsg_hdr\fP est une structure \fImsghdr\fP, conformément à \fBsendmsg\fP(2). Le champ \fImsg_len\fP est le nombre d'octets envoyés du message dans \fImsg_hdr\fP. Ce champ a la même valeur que la valeur de retour de la simple commande \fBsendmsg\fP(2). .PP L'argument \fIflags\fP contient le OU binaire de la collection des attributs. Les attributs sont ceux documentés pour \fBsendmsg\fP(2). .PP Un appel bloquant \fBsendmmsg\fP() bloque jusqu'à ce que \fIvlen\fP messages aient été envoyés. Un appel non bloquant envoie autant de messages que possible (jusqu'à la limite indiquée par \fIvlen\fP) et renvoie immédiatement. .PP Au renvoi de \fBsendmmsg\fP(), les champs \fImsg_len\fP des éléments successifs de \fImsgvec\fP sont mis à jour pour contenir le nombre d'octets transmis depuis le \fImsg_hdr\fP correspondant. La valeur de renvoi de l'appel indique le nombre d'éléments de \fImsgvec\fP mis à jour. .SH "VALEUR RENVOYÉE" En cas du succès, \fBsendmmsg\fP() renvoie le nombre de messages envoyés depuis \fImsgvec\fP\ ; si ce nombre est strictement inférieur à \fIvlen\fP, l'appelant peut réessayer avec un nouvel appel \fBsendmmsg\fP() pour envoyer les messages restants. .PP En cas d'erreur, la valeur de retour est \fB\-1\fP et \fIerrno\fP est définie pour préciser l'erreur. .SH ERREURS .\" commit 728ffb86f10873aaf4abd26dde691ee40ae731fe .\" ... only return an error if no datagrams could be sent. .\" If less than the requested number of messages were sent, the application .\" must retry starting at the first failed one and if the problem is .\" persistent the error will be returned. .\" .\" This matches the behavior of other syscalls like read/write - it .\" is not an error if less than the requested number of elements are sent. Les erreurs sont les mêmes que pour \fBsendmsg\fP(2). Une erreur n'est renvoyée que si aucun datagramme n'a pu être envoyé. Voir aussi BOGUES. .SH STANDARDS Linux. .SH HISTORIQUE Linux 3.0, glibc 2.14. .SH NOTES .\" commit 98382f419f32d2c12d021943b87dea555677144b .\" net: Cap number of elements for sendmmsg .\" .\" To limit the amount of time we can spend in sendmmsg, cap the .\" number of elements to UIO_MAXIOV (currently 1024). .\" .\" For error handling an application using sendmmsg needs to retry at .\" the first unsent message, so capping is simpler and requires less .\" application logic than returning EINVAL. La valeur indiquée dans \fIvlen\fP ne peut pas dépasser \fBUIO_MAXIOV\fP (1024). .SH BOGUES Si une erreur se produit après qu'au moins un message a été envoyé, l'appel réussit et renvoie le nombre de messages envoyés. Le code d'erreur est perdu. L'appelant peut réessayer le transfert à partir du premier message échoué mais rien ne garantit que, si une erreur est renvoyée, il s'agira de la même que celle perdue lors du précédent appel. .SH EXEMPLES L'exemple ci\-dessous utilise \fBsendmmsg\fP() pour envoyer \fIundeux\fP et \fItrois\fP dans deux datagrammes UDP distincts en utilisant un seul appel système. Les contenus des premiers datagrammes proviennent d'une paire de tampons. .PP .\" SRC BEGIN (sendmmsg.c) .EX #define _GNU_SOURCE #include #include #include #include #include #include #include \& int main(void) { int retval; int sockfd; struct iovec msg1[2], msg2; struct mmsghdr msg[2]; struct sockaddr_in addr; \& sockfd = socket(AF_INET, SOCK_DGRAM, 0); if (sockfd == \-1) { perror("socket()"); exit(EXIT_FAILURE); } \& addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); addr.sin_port = htons(1234); if (connect(sockfd, (struct sockaddr *) &addr, sizeof(addr)) == \-1) { perror("connect()"); exit(EXIT_FAILURE); } \& memset(msg1, 0, sizeof(msg1)); msg1[0].iov_base = "un"; msg1[0].iov_len = 3; msg1[1].iov_base = "deux"; msg1[1].iov_len = 3; \& 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; \& retval = sendmmsg(sockfd, msg, 2, 0); if (retval == \-1) perror("sendmmsg()"); else printf("%d messages envoyés\en", resultat); \& exit(0); } .EE .\" SRC END .SH "VOIR AUSSI" \fBrecvmmsg\fP(2), \fBsendmsg\fP(2), \fBsocket\fP(2), \fBsocket\fP(7) .PP .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot , Cédric Boutillier , Frédéric Hantrais et Jean-Philippe MENGUAL . .PP Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. .PP Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à .MT debian-l10n-french@lists.debian.org .ME .