#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 sin-
       gle 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  opera-
       tion.  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.

       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

Linux                             2011-10-04                       RECVMMSG(2)
Man Pages Copyright Respective Owners. Site Copyright (C) 1994 - 2017 Hurricane Electric. All Rights Reserved.