summaryrefslogtreecommitdiffstats
path: root/man3p/recvmsg.3p
diff options
context:
space:
mode:
Diffstat (limited to 'man3p/recvmsg.3p')
-rw-r--r--man3p/recvmsg.3p212
1 files changed, 212 insertions, 0 deletions
diff --git a/man3p/recvmsg.3p b/man3p/recvmsg.3p
new file mode 100644
index 000000000..6308319ec
--- /dev/null
+++ b/man3p/recvmsg.3p
@@ -0,0 +1,212 @@
+.\" Copyright (c) 2001-2003 The Open Group, All Rights Reserved
+.TH "RECVMSG" P 2003 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\" recvmsg
+.SH NAME
+recvmsg \- receive a message from a socket
+.SH SYNOPSIS
+.LP
+\fB#include <sys/socket.h>
+.br
+.sp
+ssize_t recvmsg(int\fP \fIsocket\fP\fB, struct msghdr *\fP\fImessage\fP\fB,
+int\fP \fIflags\fP\fB);
+.br
+\fP
+.SH DESCRIPTION
+.LP
+The \fIrecvmsg\fP() function shall receive a message from a connection-mode
+or connectionless-mode socket. It is normally used
+with connectionless-mode sockets because it permits the application
+to retrieve the source address of received data.
+.LP
+The \fIrecvmsg\fP() function takes the following arguments:
+.TP 7
+\fIsocket\fP
+Specifies the socket file descriptor.
+.TP 7
+\fImessage\fP
+Points to a \fBmsghdr\fP structure, containing both the buffer to
+store the source address and the buffers for the incoming
+message. The length and format of the address depend on the address
+family of the socket. The \fImsg_flags\fP member is ignored on
+input, but may contain meaningful values on output.
+.TP 7
+\fIflags\fP
+Specifies the type of message reception. Values of this argument are
+formed by logically OR'ing zero or more of the following
+values:
+.TP 7
+MSG_OOB
+.RS
+Requests out-of-band data. The significance and semantics of out-of-band
+data are protocol-specific.
+.RE
+.TP 7
+MSG_PEEK
+.RS
+Peeks at the incoming message.
+.RE
+.TP 7
+MSG_WAITALL
+.RS
+On SOCK_STREAM sockets this requests that the function block until
+the full amount of data can be returned. The function may
+return the smaller amount of data if the socket is a message-based
+socket, if a signal is caught, if the connection is terminated,
+if MSG_PEEK was specified, or if an error is pending for the socket.
+.RE
+.sp
+.sp
+.LP
+The \fIrecvmsg\fP() function shall receive messages from unconnected
+or connected sockets and shall return the length of the
+message.
+.LP
+The \fIrecvmsg\fP() function shall return the total length of the
+message. For message-based sockets, such as SOCK_DGRAM and
+SOCK_SEQPACKET, the entire message shall be read in a single operation.
+If a message is too long to fit in the supplied buffers,
+and MSG_PEEK is not set in the \fIflags\fP argument, the excess bytes
+shall be discarded, and MSG_TRUNC shall be set in the
+\fImsg_flags\fP member of the \fBmsghdr\fP structure. For stream-based
+sockets, such as SOCK_STREAM, message boundaries shall be
+ignored. In this case, data shall be returned to the user as soon
+as it becomes available, and no data shall be discarded.
+.LP
+If the MSG_WAITALL flag is not set, data shall be returned only up
+to the end of the first message.
+.LP
+If no messages are available at the socket and O_NONBLOCK is not set
+on the socket's file descriptor, \fIrecvmsg\fP() shall
+block until a message arrives. If no messages are available at the
+socket and O_NONBLOCK is set on the socket's file descriptor,
+the \fIrecvmsg\fP() function shall fail and set \fIerrno\fP to [EAGAIN]
+or [EWOULDBLOCK].
+.LP
+In the \fBmsghdr\fP structure, the \fImsg_name\fP and \fImsg_namelen\fP
+members specify the source address if the socket is
+unconnected. If the socket is connected, the \fImsg_name\fP and \fImsg_namelen\fP
+members shall be ignored. The \fImsg_name\fP
+member may be a null pointer if no names are desired or required.
+The \fImsg_iov\fP and \fImsg_iovlen\fP fields are used to
+specify where the received data shall be stored. \fImsg_iov\fP points
+to an array of \fBiovec\fP structures; \fImsg_iovlen\fP
+shall be set to the dimension of this array. In each \fBiovec\fP structure,
+the \fIiov_base\fP field specifies a storage area and
+the \fIiov_len\fP field gives its size in bytes. Each storage area
+indicated by \fImsg_iov\fP is filled with received data in
+turn until all of the received data is stored or all of the areas
+have been filled.
+.LP
+Upon successful completion, the \fImsg_flags\fP member of the message
+header shall be the bitwise-inclusive OR of all of the
+following flags that indicate conditions detected for the received
+message:
+.TP 7
+MSG_EOR
+End-of-record was received (if supported by the protocol).
+.TP 7
+MSG_OOB
+Out-of-band data was received.
+.TP 7
+MSG_TRUNC
+Normal data was truncated.
+.TP 7
+MSG_CTRUNC
+Control data was truncated.
+.sp
+.SH RETURN VALUE
+.LP
+Upon successful completion, \fIrecvmsg\fP() shall return the length
+of the message in bytes. If no messages are available to be
+received and the peer has performed an orderly shutdown, \fIrecvmsg\fP()
+shall return 0. Otherwise, -1 shall be returned and
+\fIerrno\fP set to indicate the error.
+.SH ERRORS
+.LP
+The \fIrecvmsg\fP() function shall fail if:
+.TP 7
+.B EAGAIN \fRor\fP EWOULDBLOCK
+.sp
+The socket's file descriptor is marked O_NONBLOCK and no data is waiting
+to be received; or MSG_OOB is set and no out-of-band data
+is available and either the socket's file descriptor is marked O_NONBLOCK
+or the socket does not support blocking to await
+out-of-band data.
+.TP 7
+.B EBADF
+The \fIsocket\fP argument is not a valid open file descriptor.
+.TP 7
+.B ECONNRESET
+A connection was forcibly closed by a peer.
+.TP 7
+.B EINTR
+This function was interrupted by a signal before any data was available.
+.TP 7
+.B EINVAL
+The sum of the \fIiov_len\fP values overflows a \fBssize_t\fP, or
+the MSG_OOB flag is set and no out-of-band data is
+available.
+.TP 7
+.B EMSGSIZE
+The \fImsg_iovlen\fP member of the \fBmsghdr\fP structure pointed
+to by \fImessage\fP is less than or equal to 0, or is
+greater than {IOV_MAX}.
+.TP 7
+.B ENOTCONN
+A receive is attempted on a connection-mode socket that is not connected.
+.TP 7
+.B ENOTSOCK
+The \fIsocket\fP argument does not refer to a socket.
+.TP 7
+.B EOPNOTSUPP
+The specified flags are not supported for this socket type.
+.TP 7
+.B ETIMEDOUT
+The connection timed out during connection establishment, or due to
+a transmission timeout on active connection.
+.sp
+.LP
+The \fIrecvmsg\fP() function may fail if:
+.TP 7
+.B EIO
+An I/O error occurred while reading from or writing to the file system.
+.TP 7
+.B ENOBUFS
+Insufficient resources were available in the system to perform the
+operation.
+.TP 7
+.B ENOMEM
+Insufficient memory was available to fulfill the request.
+.sp
+.LP
+\fIThe following sections are informative.\fP
+.SH EXAMPLES
+.LP
+None.
+.SH APPLICATION USAGE
+.LP
+The \fIselect\fP() and \fIpoll\fP() functions can
+be used to determine when data is available to be received.
+.SH RATIONALE
+.LP
+None.
+.SH FUTURE DIRECTIONS
+.LP
+None.
+.SH SEE ALSO
+.LP
+\fIpoll\fP() , \fIrecv\fP() , \fIrecvfrom\fP() ,
+\fIselect\fP() , \fIsend\fP() , \fIsendmsg\fP() ,
+\fIsendto\fP() , \fIshutdown\fP() , \fIsocket\fP() , the Base Definitions
+volume of IEEE\ Std\ 1003.1-2001, \fI<sys/socket.h>\fP
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of
+Electrical and Electronics Engineers, Inc and The Open Group. In the
+event of any discrepancy between this version and the original IEEE and
+The Open Group Standard, the original IEEE and The Open Group Standard
+is the referee document. The original Standard can be obtained online at
+http://www.opengroup.org/unix/online.html .