Provided by: manpages-dev_3.35-0.1ubuntu1_all bug

NAME

       recvmmsg - receive multiple messages on a 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

       The  recvmmsg()  system  call is an extension of recvmsg(2) that allows
       the caller to receive multiple messages from a socket  using  a  single
       system call.  (This has performance benefits for some applications.)  A
       further extension over recvmsg(2) is  support  for  a  timeout  on  the
       receive operation.

       The  sockfd  argument  is  the file descriptor of the socket to receive
       data from.

       The msgvec argument is a pointer to an  array  of  mmsghdr  structures.
       The size of this array is specified in vlen.

       The mmsghdr structure is defined in <sys/socket.h> as:

           struct mmsghdr {
               struct msghdr msg_hdr;  /* Message header */
               unsigned int  msg_len;  /* Number of received bytes for header */
           };

       The  msg_hdr  field  is a msghdr structure, as described in recvmsg(2).
       The msg_len field is the number of bytes returned for  the  message  in
       the  entry.   This  field  has  the same value as the return value of a
       single recvmsg(2) on the header.

       The flags argument contains flags ORed together.   The  flags  are  the
       same as documented for recvmsg(2), with the following addition:

       MSG_WAITFORONE
              Turns on MSG_DONTWAIT after the first message has been received.

       The timeout argument points to a struct timespec (see clock_gettime(2))
       defining  a  timeout  (seconds  plus  nanoseconds)  for   the   receive
       operation.  If timeout is NULL then the operation blocks indefinitely.

       A  blocking  recvmmsg()  call  blocks  until  vlen  messages  have been
       received or until the timeout expires.  A  nonblocking  call  reads  as
       many  messages as are available (up to the limit specified by vlen) and
       returns immediately.

       On return from recvmmsg(), successive elements of msgvec are updated to
       contain  information  about each received message: msg_len contains the
       size of the received message; the subfields of msg_hdr are  updated  as
       described  in  recvmsg(2).   The return value of the call indicates the
       number of elements of msgvec that have been updated.

RETURN VALUE

       On success, recvmmsg() returns  the  number  of  messages  received  in
       msgvec;  on  error,  -1  is  returned, and errno is set to indicate the
       error.

ERRORS

       Errors are as for recvmsg(2).  In addition,  the  following  error  can
       occur:

       EINVAL timeout is invalid.

VERSIONS

       The recvmmsg() system call was added in Linux 2.6.32.  Support in glibc
       was added in version 2.12.

CONFORMING TO

       recvmmsg() is Linux-specific.

SEE ALSO

       clock_gettime(2),  recvmsg(2),  sendmmsg(2),   sendmsg(2),   socket(2),
       socket(7)

COLOPHON

       This  page  is  part of release 3.35 of the Linux man-pages project.  A
       description of the project, and information about reporting  bugs,  can
       be found at http://man7.org/linux/man-pages/.