NAME | SYNOPSIS | FEATURES | DESCRIPTION | RETURN VALUE | ATTRIBUTES | SEE ALSO
#include <sys/types.h> #include <sys/socket.h> #include <sys/uio.h>int recv(int s, char * buf, int len, int flags);
POSIX_SOCKETS
The recv , recvfrom , and recvmsg system calls are used to receive messages from a socket.
The recv call is normally used only on a connected socket (see connect (2POSIX)), while recvfrom and recvmsg may be used to receive data on a socket whether or not it is connected.
If from is non-zero, the source address of the message is supplied. The fromlen field is a value-result parameter, initialized to the size of the buffer associated with from , and modified on return to indicate the actual size of the address stored there. The length of the message is returned. If a message is too long to fit in the buffer supplied, excess bytes may be discarded depending on the type of socket the message is received from (see socket (2POSIX)).
If no messages are available at the socket, the receive call waits for a message to arrive, unless the socket is nonblocking (see ioctl (2POSIX)) in which case -1 is returned with errno set to EWOULDBLOCK.
The select (2POSIX) call may be used to determine when more data arrives.
The flags argument to a recv call is formed by or 'ing one or more of the values,
#define MSG_OOB 0x1 /* process out-of-band data */ #define MSG_PEEK 0x2 /* peek at incoming message */ |
The recvmsg call uses a msghdr structure to minimize the number of parameters directly supplied. This structure has the following form, as defined in <sys/socket.h> :
struct msghdr { caddr_t msg_name; /* optional address */ int msg_namelen; /* size of address */ struct iovec *msg_iov; /* scatter/gather array */ int msg_iovlen; /* # elements in msg_iov */ }; |
Here msg_name and msg_namelen specify the destination address if the socket is unconnected; msg_name may be given as a null pointer if no names are desired or required. The recvmsg function scatters the input data into the msg_iovlen buffers specified by the members of the msg_iov array: msg_iov[0], msg_iov[1], ..., msg_iov[msg_iovcnt-1].
The iovec structure is defined as follows:
struct iovec { caddr_t iov_base; int iov_len; }; |
Each iovec entry specifies the base address and length of an area in memory where data should be placed. The recvmsg function will always fill an area completely before proceeding to the next.
Upon successful completion, these calls return the number of bytes received; otherwise they return -1 and set errno to indicate one of the following error conditions:
The s argument is an invalid descriptor.
The s argument is not a socket.
The socket is marked non-blocking and the receive operation would block.
The calling thread has been aborted before any data was available for the receive.
The data was specified to be received into a non-existent or protected part of the c_actor's address space.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
NAME | SYNOPSIS | FEATURES | DESCRIPTION | RETURN VALUE | ATTRIBUTES | SEE ALSO