RECV(3SOCKET)             Sockets Library Functions            RECV(3SOCKET)
NAME
       recv, recvfrom, recvmsg - receive a message from a socket
SYNOPSIS
       cc [ 
flag... ] 
file... 
-lsocket  -lnsl  [ 
library... ]
       #include <sys/types.h>
       #include <sys/socket.h>
       #include <sys/uio.h>       
ssize_t recv(
int s, 
void *buf, 
size_t len, 
int flags);       
ssize_t recvfrom(
int s, 
void *buf, 
size_t len, 
int flags,            
struct sockaddr *from, 
socklen_t *fromlen);       
ssize_t recvmsg(
int s, 
struct msghdr *msg, 
int flags);
DESCRIPTION
       The 
recv(), 
recvfrom(), and 
recvmsg() functions are used to receive
       messages from another socket. The 
s socket is created with       
socket(3SOCKET).
       If 
from is a non-
NULL pointer, the source address of the message is
       filled in. The value-result parameter 
fromlen is initialized to the
       size of the buffer associated with 
from and modified on return to
       indicate the actual size of the address stored in the buffer. The
       length of the message is returned. If a message is too long to fit in
       the supplied buffer, excess bytes may be discarded depending on the
       type of socket from which the message is received. See       
socket(3SOCKET).
       If no messages are available at the socket, the receive call waits
       for a message to arrive. If the socket is non-blocking, 
-1 is
       returned with the external variable 
errno set to 
EWOULDBLOCK. See       
fcntl(2).
       For processes on the same host, 
recvmsg() can be used to receive a
       file descriptor from another process, but it cannot receive ancillary
       data. See 
libxnet(3LIB).
       If a zero-length buffer is specified for a message, an EOF condition
       results that is indistinguishable from the successful transfer of a
       file descriptor.  For that reason, one or more bytes of data should
       be provided when 
recvmsg() passes a file descriptor.
       The 
poll(2), 
select(3C), and 
port_get(3C) functions can be used to
       determine when more data arrives.
       The 
flags parameter is formed by an 
OR operation on one or more of
       the following:       
MSG_OOB                       Read any 
out-of-band data present on the socket
                       rather than the regular 
in-band data.       
MSG_PEEK                       Peek at the data present on the socket. The data is
                       returned, but not consumed to allow a subsequent
                       receive operation to see the same data.       
MSG_WAITALL                       Messages are blocked until the full amount of data
                       requested is returned. The 
recv() function can return
                       a smaller amount of data if a signal is caught, the
                       connection is terminated, 
MSG_PEEK is specified, or
                       if an error is pending for the socket.       
MSG_DONTWAIT                       Pending messages received on the connection are
                       returned. If data is unavailable, the function does
                       not block. This behavior is the equivalent to
                       specifying 
O_NONBLOCK on the file descriptor of a
                       socket, except that write requests are unaffected.       
MSG_CMSG_CLOEXEC                       When receiving the 
SCM_RIGHTS ancillary data, all
                       such file descriptors should be marked with the
                       close-on-exec, 
FD_CLOEXEC flag.  These file
                       descriptors will be closed on successful execution of
                       the 
exec(2) family of functions.       
MSG_CMSG_CLOFORK                       When receiving the 
SCM_RIGHTS ancillary data, all
                       such file descriptors should be marked with the
                       close-on-fork, 
FD_CLOFORK flag.  These file
                       descriptors will be closed in any children created
                       with the 
fork(2) family of functions.
       The 
recvmsg() function call uses a 
msghdr structure defined in
       <
sys/socket.h> to minimize the number of directly supplied
       parameters.
RETURN VALUES
       Upon successful completion, these functions return the number of
       bytes received. Otherwise, they return 
-1 and set 
errno to indicate
       the error.
ERRORS
       In addition to the errors documented below, an asynchronous error
       generated by the underlying socket protocol may be returned. For the
       full list of errors, please see the corresponding socket protocol
       manual page. For example, for a list of TCP errors, please see       
tcp(4P).
       The 
recv(), 
recvfrom(), and 
recvmsg() functions return errors under
       the following conditions:       
EBADF                       The 
s file descriptor is invalid.       
ECONNRESET                       The 
s argument refers to a connection oriented socket
                       and the connection was forcibly closed by the peer
                       and is no longer valid. I/O can no longer be
                       performed to 
filedes.       
EINVAL                       The 
MSG_OOB flag is set and no out-of-band data is
                       available.       
EINTR                       The operation is interrupted by the delivery of a
                       signal before any data is available to be received.       
EIO                       An I/O error occurs while reading from or writing to
                       the file system.       
ENOMEM                       Insufficient user memory is available to complete
                       operation.       
ENOSR                       Insufficient 
STREAMS resources are available for the
                       operation to complete.       
ENOTSOCK                       s is not a socket.       
ESTALE                       A stale NFS file handle exists.       
EWOULDBLOCK                       The socket is marked non-blocking and the requested
                       operation would block.       
ECONNREFUSED                       The requested connection was refused by the peer. For
                       connected IPv4 and IPv6 datagram sockets, this
                       indicates that the system received an 
ICMP                       Destination Port Unreachable message from the peer.
       The 
recv() and 
recvfrom() functions fail under the following
       conditions:       
EINVAL                 The 
len argument overflows a 
ssize_t.
       The 
recvmsg() function returns errors under the following conditions:       
EINVAL                 The 
msg_iovlen member of the 
msghdr structure pointed to by                 
msg is less than or equal to 
0, or greater than 
[IOV_MAX}.
                 See 
Intro(2) for a definition of 
[IOV_MAX}.       
EINVAL                 One of the 
iov_len values in the 
msg_iov array member of
                 the 
msghdr structure pointed to by 
msg is negative, or the
                 sum of the 
iov_len values in the 
msg_iov array overflows a                 
ssize_t.
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |Interface Stability | Committed       |
       +--------------------+-----------------+
       |MT-Level            | Safe            |
       +--------------------+-----------------+
SEE ALSO
       fcntl(2), 
ioctl(2), 
poll(2), 
read(2), 
connect(3SOCKET),       
getsockopt(3SOCKET), 
libxnet(3LIB), 
port_get(3C), 
select(3C),       
socket.h(3HEAD), 
send(3SOCKET), 
sockaddr(3SOCKET), 
socket(3SOCKET),       
tcp(4P), 
attributes(7)                                June 21, 2024                  RECV(3SOCKET)