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


       recvmmsg - receive multiple messages on a socket


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

       int recvmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen,
                    unsigned int flags, struct timespec *timeout);


       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:

              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.


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


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

       EINVAL timeout is invalid.


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


       recvmmsg() is Linux-specific.


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


       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