NOM¶
recvmmsg - Recevoir plusieurs message sur une socket
SYNOPSIS¶
#define _GNU_SOURCE
#include <sys/socket.h>
int recvmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen,
unsigned int flags, struct timespec *timeout);
DESCRIPTION¶
L'appel système
recvmmsg() est une extension de
recvmsg(2)
qui permet à l'appelant de recevoir plusieurs messages d'une socket en
utilisant un seul appel système. (Cela améliore les performances
pour certaines applications.) Une autre propriété de ce cette
extension de
recvmsg(2) est la gestion d'une temporisation pour
l'opération de réception.
Le paramètre
sockfd est le descripteur de fichier de la socket
émettrice.
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'octes reçus pour l'en-tête */
};
Le champ
msg_hdr est une structure
msghdr, conformément
à
recvmsg(2). Le champ
msg_len est le nombre d'octets
retourné par le message dans l'entrée. Ce champ a la même
valeur que la valeur de retour de la simple commande
recvmsg(2) sur
l'en-tête.
L'argument
flags contient le OU binaire de la collection des attributs.
Les attributs sont ceux documentés pour
recvmsg(2), plus :
- MSG_WIATFORONE
- Activer MSG_DONTWAIT après le premier message
reçu.
L'argument
timeout est un pointeur vers une
struct timespec
(consultez
clock_gettime(2)) définissant la temporisation (en
secondes et nanosecondes) pour l'opération de réception. (Cet
intervalle sera arrondi à la granularité de l'horloge système,
et peut être légèrement modifié à cause des
délais d'ordonnancement du noyau.) Si
timeout est le pointeur nul,
l'opération se bloque indéfiniment.
Un appel bloquant
recvmmsg() bloque jusqu'à la réception de
vlsen messages ou l'expiration de la temporisation. Un appel non
bloquant lit autant de messages que disponibles (jusqu'à la limite
indiquée par
vlen) et retourne immédiatement.
Au retour de
recvmmsg(), les éléments successifs de
msgvec sont mis à jour pour contenir l'information concernant
chaque message reçu : les champs secondaires de
msg_hdr sont mis
à jour conformément à
recmsg(2). 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,
recvmmsg() retourne le nombre de messages
reçus dans
msgvec ; Dans le cas contraire, il renvoie -1 et
remplit
errno avec le code d'erreur.
ERREURS¶
Les erreurs sont les mêmes que pour
recvmsg(2), plus l'erreur
suivante :
- EINVAL
- timeout n'est pas valable.
VERSIONS¶
L'appel système
recvmmsg() a été ajouté dans
Linux 2.6.32. La prise en charge dans la glibc a été
ajoutée dans la version 2.12.
recvmmsg() est spécifique à Linux.
VOIR AUSSI¶
clock_gettime(2),
recvmsg(2),
sendmmsg(2),
sendmsg(2),
socket(2),
socket(7)
COLOPHON¶
Cette page fait partie de la publication 3.44 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> ».