summaryrefslogtreecommitdiffstats
path: root/man2/recv.2
diff options
context:
space:
mode:
Diffstat (limited to 'man2/recv.2')
-rw-r--r--man2/recv.2563
1 files changed, 0 insertions, 563 deletions
diff --git a/man2/recv.2 b/man2/recv.2
deleted file mode 100644
index 916cca3..0000000
--- a/man2/recv.2
+++ /dev/null
@@ -1,563 +0,0 @@
-.\" Copyright (c) 1983, 1990, 1991 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" SPDX-License-Identifier: BSD-4-Clause-UC
-.\"
-.\" $Id: recv.2,v 1.3 1999/05/13 11:33:38 freitag Exp $
-.\"
-.\" Modified Sat Jul 24 00:22:20 1993 by Rik Faith <faith@cs.unc.edu>
-.\" Modified Tue Oct 22 17:45:19 1996 by Eric S. Raymond <esr@thyrsus.com>
-.\" Modified 1998,1999 by Andi Kleen
-.\" 2001-06-19 corrected SO_EE_OFFENDER, bug report by James Hawtin
-.\"
-.TH recv 2 2024-02-18 "Linux man-pages 6.7"
-.SH NAME
-recv, recvfrom, recvmsg \- receive a message from a socket
-.SH LIBRARY
-Standard C library
-.RI ( libc ", " \-lc )
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.P
-.BI "ssize_t recv(int " sockfd ", void " buf [. len "], size_t " len ,
-.BI " int " flags );
-.BI "ssize_t recvfrom(int " sockfd ", void " buf "[restrict ." len "], size_t " len ,
-.BI " int " flags ,
-.BI " struct sockaddr *_Nullable restrict " src_addr ,
-.BI " socklen_t *_Nullable restrict " addrlen );
-.BI "ssize_t recvmsg(int " sockfd ", struct msghdr *" msg ", int " flags );
-.fi
-.SH DESCRIPTION
-The
-.BR recv (),
-.BR recvfrom (),
-and
-.BR recvmsg ()
-calls are used to receive messages from a socket.
-They may be used
-to receive data on both connectionless and connection-oriented sockets.
-This page first describes common features of all three system calls,
-and then describes the differences between the calls.
-.P
-The only difference between
-.BR recv ()
-and
-.BR read (2)
-is the presence of
-.IR flags .
-With a zero
-.I flags
-argument,
-.BR recv ()
-is generally equivalent to
-.BR read (2)
-(but see NOTES).
-Also, the following call
-.P
-.in +4n
-.EX
-recv(sockfd, buf, len, flags);
-.EE
-.in
-.P
-is equivalent to
-.P
-.in +4n
-.EX
-recvfrom(sockfd, buf, len, flags, NULL, NULL);
-.EE
-.in
-.P
-All three calls return the length of the message on successful
-completion.
-If a message is too long to fit in the supplied buffer, excess
-bytes may be discarded depending on the type of socket the message is
-received from.
-.P
-If no messages are available at the socket, the receive calls wait for a
-message to arrive, unless the socket is nonblocking (see
-.BR fcntl (2)),
-in which case the value \-1 is returned and
-.I errno
-is set to
-.BR EAGAIN " or " EWOULDBLOCK .
-The receive calls normally return any data available, up to the requested
-amount, rather than waiting for receipt of the full amount requested.
-.P
-An application can use
-.BR select (2),
-.BR poll (2),
-or
-.BR epoll (7)
-to determine when more data arrives on a socket.
-.SS The flags argument
-The
-.I flags
-argument is formed by ORing one or more of the following values:
-.TP
-.BR MSG_CMSG_CLOEXEC " (" recvmsg "() only; since Linux 2.6.23)"
-Set the close-on-exec flag for the file descriptor received
-via a UNIX domain file descriptor using the
-.B SCM_RIGHTS
-operation (described in
-.BR unix (7)).
-This flag is useful for the same reasons as the
-.B O_CLOEXEC
-flag of
-.BR open (2).
-.TP
-.BR MSG_DONTWAIT " (since Linux 2.2)"
-Enables nonblocking operation; if the operation would block,
-the call fails with the error
-.BR EAGAIN " or " EWOULDBLOCK .
-This provides similar behavior to setting the
-.B O_NONBLOCK
-flag (via the
-.BR fcntl (2)
-.B F_SETFL
-operation), but differs in that
-.B MSG_DONTWAIT
-is a per-call option, whereas
-.B O_NONBLOCK
-is a setting on the open file description (see
-.BR open (2)),
-which will affect all threads in the calling process
-as well as other processes that hold file descriptors
-referring to the same open file description.
-.TP
-.BR MSG_ERRQUEUE " (since Linux 2.2)"
-This flag
-specifies that queued errors should be received from the socket error queue.
-The error is passed in
-an ancillary message with a type dependent on the protocol (for IPv4
-.BR IP_RECVERR ).
-The user should supply a buffer of sufficient size.
-See
-.BR cmsg (3)
-and
-.BR ip (7)
-for more information.
-The payload of the original packet that caused the error
-is passed as normal data via
-.IR msg_iovec .
-The original destination address of the datagram that caused the error
-is supplied via
-.IR msg_name .
-.IP
-The error is supplied in a
-.I sock_extended_err
-structure:
-.IP
-.in +4n
-.EX
-#define SO_EE_ORIGIN_NONE 0
-#define SO_EE_ORIGIN_LOCAL 1
-#define SO_EE_ORIGIN_ICMP 2
-#define SO_EE_ORIGIN_ICMP6 3
-\&
-struct sock_extended_err
-{
- uint32_t ee_errno; /* Error number */
- uint8_t ee_origin; /* Where the error originated */
- uint8_t ee_type; /* Type */
- uint8_t ee_code; /* Code */
- uint8_t ee_pad; /* Padding */
- uint32_t ee_info; /* Additional information */
- uint32_t ee_data; /* Other data */
- /* More data may follow */
-};
-\&
-struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);
-.EE
-.in
-.IP
-.I ee_errno
-contains the
-.I errno
-number of the queued error.
-.I ee_origin
-is the origin code of where the error originated.
-The other fields are protocol-specific.
-The macro
-.B SO_EE_OFFENDER
-returns a pointer to the address of the network object
-where the error originated from given a pointer to the ancillary message.
-If this address is not known, the
-.I sa_family
-member of the
-.I sockaddr
-contains
-.B AF_UNSPEC
-and the other fields of the
-.I sockaddr
-are undefined.
-The payload of the packet that caused the error is passed as normal data.
-.IP
-For local errors, no address is passed (this
-can be checked with the
-.I cmsg_len
-member of the
-.IR cmsghdr ).
-For error receives,
-the
-.B MSG_ERRQUEUE
-flag is set in the
-.IR msghdr .
-After an error has been passed, the pending socket error
-is regenerated based on the next queued error and will be passed
-on the next socket operation.
-.TP
-.B MSG_OOB
-This flag requests receipt of out-of-band data that would not be received
-in the normal data stream.
-Some protocols place expedited data
-at the head of the normal data queue, and thus this flag cannot
-be used with such protocols.
-.TP
-.B MSG_PEEK
-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.
-.TP
-.BR MSG_TRUNC " (since Linux 2.2)"
-For raw
-.RB ( AF_PACKET ),
-Internet datagram (since Linux 2.4.27/2.6.8),
-netlink (since Linux 2.6.22),
-and UNIX datagram as well as sequenced-packet
-.\" commit 9f6f9af7694ede6314bed281eec74d588ba9474f
-(since Linux 3.4) sockets:
-return the real length of the packet or datagram,
-even when it was longer than the passed buffer.
-.IP
-For use with Internet stream sockets, see
-.BR tcp (7).
-.TP
-.BR MSG_WAITALL " (since Linux 2.2)"
-This flag requests that the operation block until the full request is
-satisfied.
-However, the call may still return less data than requested if
-a signal is caught, an error or disconnect occurs, or the next data to be
-received is of a different type than that returned.
-This flag has no effect for datagram sockets.
-.\"
-.SS recvfrom()
-.BR recvfrom ()
-places the received message into the buffer
-.IR buf .
-The caller must specify the size of the buffer in
-.IR len .
-.P
-If
-.I src_addr
-is not NULL,
-and the underlying protocol provides the source address of the message,
-that source address is placed in the buffer pointed to by
-.IR src_addr .
-.\" (Note: for datagram sockets in both the UNIX and Internet domains,
-.\" .I src_addr
-.\" is filled in.
-.\" .I src_addr
-.\" is also filled in for stream sockets in the UNIX domain, but is not
-.\" filled in for stream sockets in the Internet domain.)
-.\" [The above notes on AF_UNIX and AF_INET sockets apply as at
-.\" Kernel 2.4.18. (MTK, 22 Jul 02)]
-In this case,
-.I addrlen
-is a value-result argument.
-Before the call,
-it should be initialized to the size of the buffer associated with
-.IR src_addr .
-Upon return,
-.I addrlen
-is updated to contain the actual size of the source address.
-The returned address is truncated if the buffer provided is too small;
-in this case,
-.I addrlen
-will return a value greater than was supplied to the call.
-.P
-If the caller is not interested in the source address,
-.I src_addr
-and
-.I addrlen
-should be specified as NULL.
-.\"
-.SS recv()
-The
-.BR recv ()
-call is normally used only on a
-.I connected
-socket (see
-.BR connect (2)).
-It is equivalent to the call:
-.P
-.in +4n
-.EX
-recvfrom(fd, buf, len, flags, NULL, 0);
-.EE
-.in
-.\"
-.SS recvmsg()
-The
-.BR recvmsg ()
-call uses a
-.I msghdr
-structure to minimize the number of directly supplied arguments.
-This structure is defined as follows in
-.IR <sys/socket.h> :
-.P
-.in +4n
-.EX
-struct msghdr {
- void *msg_name; /* Optional address */
- socklen_t msg_namelen; /* Size of address */
- struct iovec *msg_iov; /* Scatter/gather array */
- size_t msg_iovlen; /* # elements in msg_iov */
- void *msg_control; /* Ancillary data, see below */
- size_t msg_controllen; /* Ancillary data buffer len */
- int msg_flags; /* Flags on received message */
-};
-.EE
-.in
-.P
-The
-.I msg_name
-field points to a caller-allocated buffer that is used to
-return the source address if the socket is unconnected.
-The caller should set
-.I msg_namelen
-to the size of this buffer before this call;
-upon return from a successful call,
-.I msg_namelen
-will contain the length of the returned address.
-If the application does not need to know the source address,
-.I msg_name
-can be specified as NULL.
-.P
-The fields
-.I msg_iov
-and
-.I msg_iovlen
-describe scatter-gather locations, as discussed in
-.BR readv (2).
-.P
-The field
-.IR msg_control ,
-which has length
-.IR msg_controllen ,
-points to a buffer for other protocol control-related messages or
-miscellaneous ancillary data.
-When
-.BR recvmsg ()
-is called,
-.I msg_controllen
-should contain the length of the available buffer in
-.IR msg_control ;
-upon return from a successful call it will contain the length
-of the control message sequence.
-.P
-The messages are of the form:
-.P
-.in +4n
-.EX
-struct cmsghdr {
- size_t cmsg_len; /* Data byte count, including header
- (type is socklen_t in POSIX) */
- int cmsg_level; /* Originating protocol */
- int cmsg_type; /* Protocol\-specific type */
-/* followed by
- unsigned char cmsg_data[]; */
-};
-.EE
-.in
-.P
-Ancillary data should be accessed only by the macros defined in
-.BR cmsg (3).
-.P
-As an example, Linux uses this ancillary data mechanism to pass extended
-errors, IP options, or file descriptors over UNIX domain sockets.
-For further information on the use of ancillary data in various
-socket domains, see
-.BR unix (7)
-and
-.BR ip (7).
-.P
-The
-.I msg_flags
-field in the
-.I msghdr
-is set on return of
-.BR recvmsg ().
-It can contain several flags:
-.TP
-.B MSG_EOR
-indicates end-of-record; the data returned completed a record (generally
-used with sockets of type
-.BR SOCK_SEQPACKET ).
-.TP
-.B MSG_TRUNC
-indicates that the trailing portion of a datagram was discarded because the
-datagram was larger than the buffer supplied.
-.TP
-.B MSG_CTRUNC
-indicates that some control data was discarded due to lack of space in the
-buffer for ancillary data.
-.TP
-.B MSG_OOB
-is returned to indicate that expedited or out-of-band data was received.
-.TP
-.B MSG_ERRQUEUE
-indicates that no data was received but an extended error from the socket
-error queue.
-.TP
-.BR MSG_CMSG_CLOEXEC " (since Linux 2.6.23)"
-.\" commit 4a19542e5f694cd408a32c3d9dc593ba9366e2d7
-indicates that
-.B MSG_CMSG_CLOEXEC
-was specified in the
-.I flags
-argument of
-.BR recvmsg ().
-.SH RETURN VALUE
-These calls return the number of bytes received, or \-1
-if an error occurred.
-In the event of an error,
-.I errno
-is set to indicate the error.
-.P
-When a stream socket peer has performed an orderly shutdown,
-the return value will be 0 (the traditional "end-of-file" return).
-.P
-Datagram sockets in various domains (e.g., the UNIX and Internet domains)
-permit zero-length datagrams.
-When such a datagram is received, the return value is 0.
-.P
-The value 0 may also be returned if the requested number of bytes
-to receive from a stream socket was 0.
-.SH ERRORS
-These are some standard errors generated by the socket layer.
-Additional errors
-may be generated and returned from the underlying protocol modules;
-see their manual pages.
-.TP
-.BR EAGAIN " or " EWOULDBLOCK
-.\" Actually EAGAIN on Linux
-The socket is marked nonblocking and the receive operation
-would block, or a receive timeout had been set and the timeout expired
-before data was received.
-POSIX.1 allows either error to be returned for this case,
-and does not require these constants to have the same value,
-so a portable application should check for both possibilities.
-.TP
-.B EBADF
-The argument
-.I sockfd
-is an invalid file descriptor.
-.TP
-.B ECONNREFUSED
-A remote host refused to allow the network connection (typically
-because it is not running the requested service).
-.TP
-.B EFAULT
-The receive buffer pointer(s) point outside the process's
-address space.
-.TP
-.B EINTR
-The receive was interrupted by delivery of a signal before
-any data was available; see
-.BR signal (7).
-.TP
-.B EINVAL
-Invalid argument passed.
-.\" e.g., msg_namelen < 0 for recvmsg() or addrlen < 0 for recvfrom()
-.TP
-.B ENOMEM
-Could not allocate memory for
-.BR recvmsg ().
-.TP
-.B ENOTCONN
-The socket is associated with a connection-oriented protocol
-and has not been connected (see
-.BR connect (2)
-and
-.BR accept (2)).
-.TP
-.B ENOTSOCK
-The file descriptor
-.I sockfd
-does not refer to a socket.
-.SH VERSIONS
-According to POSIX.1,
-.\" POSIX.1-2001, POSIX.1-2008
-the
-.I msg_controllen
-field of the
-.I msghdr
-structure should be typed as
-.IR socklen_t ,
-and the
-.I msg_iovlen
-field should be typed as
-.IR int ,
-but glibc currently types both as
-.IR size_t .
-.\" glibc bug for msg_controllen raised 12 Mar 2006
-.\" http://sourceware.org/bugzilla/show_bug.cgi?id=2448
-.\" The problem is an underlying kernel issue: the size of the
-.\" __kernel_size_t type used to type these fields varies
-.\" across architectures, but socklen_t is always 32 bits,
-.\" as (at least with GCC) is int.
-.SH STANDARDS
-POSIX.1-2008.
-.SH HISTORY
-POSIX.1-2001,
-4.4BSD (first appeared in 4.2BSD).
-.P
-POSIX.1 describes only the
-.BR MSG_OOB ,
-.BR MSG_PEEK ,
-and
-.B MSG_WAITALL
-flags.
-.SH NOTES
-If a zero-length datagram is pending,
-.BR read (2)
-and
-.BR recv ()
-with a
-.I flags
-argument of zero provide different behavior.
-In this circumstance,
-.BR read (2)
-has no effect (the datagram remains pending), while
-.BR recv ()
-consumes the pending datagram.
-.P
-See
-.BR recvmmsg (2)
-for information about a Linux-specific system call
-that can be used to receive multiple datagrams in a single call.
-.SH EXAMPLES
-An example of the use of
-.BR recvfrom ()
-is shown in
-.BR getaddrinfo (3).
-.SH SEE ALSO
-.BR fcntl (2),
-.BR getsockopt (2),
-.BR read (2),
-.BR recvmmsg (2),
-.BR select (2),
-.BR shutdown (2),
-.BR socket (2),
-.BR cmsg (3),
-.BR sockatmark (3),
-.BR ip (7),
-.BR ipv6 (7),
-.BR socket (7),
-.BR tcp (7),
-.BR udp (7),
-.BR unix (7)