Man Pages

recvmmsg(2) - phpMan recvmmsg(2) - phpMan

Command: man perldoc info search(apropos)  


RECVMMSG(2)                Linux Programmer's Manual               RECVMMSG(2)



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  non-
       blocking  call  reads as many messages as are available (up to the limit specified by vlen) and returns immedi-
       ately.

       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)



Linux                             2011-09-09                       RECVMMSG(2)