Receives messages from sockets.
Standard C Library (libc.a)
The recvfrom subroutine allows an application program to receive messages from unconnected sockets. The recvfrom subroutine is normally applied to unconnected sockets as it includes parameters that allow the calling program to specify the source point of the data to be received.
To return the source address of the message, specify a nonnull value for the From parameter. The FromLength parameter is a value-result parameter, initialized to the size of the buffer associated with the From parameter. On return, the recvfrom subroutine modifies the FromLength parameter to indicate the actual size of the stored address. The recvfrom subroutine returns the length of the message. If a message is too long to fit in the supplied buffer, excess bytes may be truncated depending on the type of socket that issued the message.
If no messages are available at the socket, the recvfrom subroutine waits for a message to arrive, unless the socket is nonblocking. If the socket is nonblocking, the system returns an error.
The socket applications can be compiled with COMPAT_43 defined. This will make the sockaddr structure BSD 4.3 compatible. For more details refer to socket.h.
Item | Description |
---|---|
Socket | Specifies the socket descriptor. |
Buffer | Specifies an address where the message should be placed. |
Length | Specifies the size of the Buffer parameter. |
Flags | Points to a value controlling the message reception. The argument
to receive a call is formed by logically ORing one or more of the
values shown in the following list:
|
From | Points to a socket structure, filled in with the source's address. |
FromLength | Specifies the length of the sender's or source's address. |
If the recvfrom subroutine is successful, the subroutine returns the length of the message in bytes.
If the call is unsuccessful, the subroutine handler performs the following functions:
The recvfrom subroutine is unsuccessful if any of the following errors occurs:
Error | Description |
---|---|
EBADF | The Socket parameter is not valid. |
ECONNRESET | The remote peer forces the connection to be closed. |
EFAULT | The data was directed to be received into a nonexistent or protected part of the process address space. The buffer is not valid. |
EINTR | The receive is interrupted by a signal delivery before any data is available. |
EINVAL | The MSG_OOB flag is set but no out-of-band data is available. |
ENOBUF | Insufficient resources are available in the system to perform the operation. |
ENOPROTOOPT | The protocol is not 64-bit supported. |
ENOTCONN | A receive is attempted on a SOCK_STREAM socket that is not connected. |
ENOTSOCK | The Socket parameter refers to a file, not a socket. |
EOPNOTSUPP | MSG_OOB flag is set for a SOCK_DGRAM socket, or MSG_OOB flag is set for any AF_UNIX socket. |
ETIMEDOUT | The connection timed out during connection establishment, or there was a transmission timeout on an active connection. |
EWOULDBLOCK | The socket is marked nonblocking, and no connections are present to be accepted. |