recvmmsg()

Receive multiple messages and their headers from a socket

Synopsis:

#include <sys/types.h>
#include <sys/socket.h>

int recvmmsg( int s,
              struct mmsghdr *mmsg,
              unsigned int vlen,
              unsigned int flags,
              struct timespec *timeout );

Arguments:

s
The descriptor for the socket; see socket().
mmsg
A pointer to an array of mmsghdr structures where the function can store the message headers; see below.
vlen
The length of the mmsg array; limited to 1024 elements.
flags
A bitwise OR of zero or more of the following:
  • MSG_OOB — process out-of-band data. This flag requests receipt of out-of-band data that wouldn't be received in the normal data stream. You can't use this flag with protocols that place expedited data at the head of the normal data queue.
  • MSG_PEEK — peek at the incoming message. This flag causes the receive operation to return data from the beginning of the receive queue without removing that data from the queue. Thus, a subsequent receive call will return the same data.
  • MSG_WAITALL — wait for full request or error. This flag requests that the operation block until the full request is satisfied. But the call may still return less data than requested if a signal is caught, if an error or disconnect occurs, or if the next data to be received is of a different type than that returned.
timeout
The length of time to wait for messages to be received, after which recvmmsg() returns.

Library:

libsocket

Use the -l socket option to qcc to link against this library.

Description:

The recvmmsg() function receives multiple messages from a socket, s, whether or not it's connection-oriented.

The recvmmsg() function uses a mmsghdr structure to minimize the number of directly supplied parameters. This structure is defined in <sys/socket.h> as follows:

struct mmsghdr {
    struct msghdr   msg_hdr; /* the message to be sent */
    unsigned int    msg_len; /* number of bytes transmitted */
};

The msg_len member contains the number of bytes sent for each msg_hdr member. The array has vlen elements, but if there's an error, a number fewer than vlen may be returned. For a description of the msghdr structure, see recvmsg().

Returns:

The number of messages received, or -1 if an error occurs (errno is set).

Errors:

ENOMEM
Not enough memory.
EOVERFLOW
An attempt was made to receive an amount of data that exceeds the allowable limit.

Classification:

Unix

Safety:  
Cancellation point Yes
Interrupt handler No
Signal handler No
Thread Yes