]> git.saurik.com Git - apple/xnu.git/blame - bsd/man/man2/recv.2
xnu-1228.7.58.tar.gz
[apple/xnu.git] / bsd / man / man2 / recv.2
CommitLineData
9bccf70c
A
1.\" Copyright (c) 1983, 1990, 1991, 1993
2.\" The Regents of the University of California. All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\" notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\" notice, this list of conditions and the following disclaimer in the
11.\" documentation and/or other materials provided with the distribution.
12.\" 3. All advertising materials mentioning features or use of this software
13.\" must display the following acknowledgement:
14.\" This product includes software developed by the University of
15.\" California, Berkeley and its contributors.
16.\" 4. Neither the name of the University nor the names of its contributors
17.\" may be used to endorse or promote products derived from this software
18.\" without specific prior written permission.
19.\"
20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30.\" SUCH DAMAGE.
31.\"
32.\" @(#)recv.2 8.3 (Berkeley) 2/21/94
33.\"
2d21ac55 34.Dd May 15, 2006
9bccf70c 35.Dt RECV 2
2d21ac55 36.Os
9bccf70c
A
37.Sh NAME
38.Nm recv ,
39.Nm recvfrom ,
40.Nm recvmsg
41.Nd receive a message from a socket
2d21ac55
A
42.Sh LIBRARY
43.Lb libc
9bccf70c 44.Sh SYNOPSIS
2d21ac55 45.In sys/socket.h
9bccf70c 46.Ft ssize_t
2d21ac55
A
47.Fo recv
48.Fa "int socket"
49.Fa "void *buffer"
50.Fa "size_t length"
51.Fa "int flags"
52.Fc
9bccf70c 53.Ft ssize_t
2d21ac55
A
54.Fo recvfrom
55.Fa "int socket"
56.Fa "void *restrict buffer"
57.Fa "size_t length"
58.Fa "int flags"
59.Fa "struct sockaddr *restrict address"
60.Fa "socklen_t *restrict address_len"
61.Fc
9bccf70c 62.Ft ssize_t
2d21ac55
A
63.Fo recvmsg
64.Fa "int socket"
65.Fa "struct msghdr *message"
66.Fa "int flags"
67.Fc
9bccf70c 68.Sh DESCRIPTION
2d21ac55
A
69The
70.Fn recvfrom
9bccf70c
A
71and
72.Fn recvmsg
2d21ac55 73system calls
9bccf70c
A
74are used to receive messages from a socket,
75and may be used to receive data on a socket whether or not
76it is connection-oriented.
77.Pp
78If
2d21ac55
A
79.Fa address
80is not a null pointer
81and the socket is not connection-oriented,
9bccf70c 82the source address of the message is filled in.
2d21ac55
A
83The
84.Fa address_len
85argument
86is a value-result argument, initialized to the size of
9bccf70c 87the buffer associated with
2d21ac55 88.Fa address ,
9bccf70c
A
89and modified on return to indicate the actual size of the
90address stored there.
91.Pp
2d21ac55 92The
9bccf70c 93.Fn recv
2d21ac55 94function is normally used only on a
9bccf70c
A
95.Em connected
96socket (see
97.Xr connect 2 )
98and is identical to
99.Fn recvfrom
2d21ac55
A
100with a
101null pointer passed as its
102.Fa address
103argument.
9bccf70c
A
104As it is redundant, it may not be supported in future releases.
105.Pp
2d21ac55
A
106All three routines return the length of the message on successful
107completion.
108If a message is too long to fit in the supplied buffer,
109excess bytes may be discarded depending on the type of socket
9bccf70c
A
110the message is received from (see
111.Xr socket 2 ) .
112.Pp
113If no messages are available at the socket, the
114receive call waits for a message to arrive, unless
115the socket is nonblocking (see
116.Xr fcntl 2 )
117in which case the value
118-1 is returned and the external variable
119.Va errno
120set to
121.Er EAGAIN .
122The receive calls normally return any data available,
123up to the requested amount,
124rather than waiting for receipt of the full amount requested;
125this behavior is affected by the socket-level options
126.Dv SO_RCVLOWAT
127and
128.Dv SO_RCVTIMEO
129described in
130.Xr getsockopt 2 .
131.Pp
132The
133.Xr select 2
2d21ac55
A
134system call may be used to determine when more data arrive.
135.Pp
136If no messages are available to be received and the peer has
137performed an orderly shutdown, the value 0 is returned.
9bccf70c
A
138.Pp
139The
140.Fa flags
2d21ac55
A
141argument to a
142.Fn recv
143function is formed by
9bccf70c
A
144.Em or Ap ing
145one or more of the values:
146.Bl -column MSG_WAITALL -offset indent
147.It Dv MSG_OOB Ta process out-of-band data
148.It Dv MSG_PEEK Ta peek at incoming message
149.It Dv MSG_WAITALL Ta wait for full request or error
150.El
2d21ac55 151.Pp
9bccf70c
A
152The
153.Dv MSG_OOB
154flag requests receipt of out-of-band data
155that would not be received in the normal data stream.
156Some protocols place expedited data at the head of the normal
157data queue, and thus this flag cannot be used with such protocols.
2d21ac55
A
158The
159.Dv MSG_PEEK
160flag causes the receive operation to return data
9bccf70c
A
161from the beginning of the receive queue without removing that
162data from the queue.
163Thus, a subsequent receive call will return the same data.
2d21ac55
A
164The
165.Dv MSG_WAITALL
166flag requests that the operation block until
9bccf70c
A
167the full request is satisfied.
168However, the call may still return less data than requested
169if a signal is caught, an error or disconnect occurs,
170or the next data to be received is of a different type than that returned.
171.Pp
172The
173.Fn recvmsg
2d21ac55 174system call uses a
9bccf70c 175.Fa msghdr
2d21ac55 176structure to minimize the number of directly supplied arguments.
9bccf70c 177This structure has the following form, as defined in
2d21ac55 178.In sys/socket.h :
9bccf70c
A
179.Pp
180.Bd -literal
181struct msghdr {
2d21ac55
A
182 void *msg_name; /* optional address */
183 socklen_t msg_namelen; /* size of address */
184 struct iovec *msg_iov; /* scatter/gather array */
185 int msg_iovlen; /* # elements in msg_iov */
186 void *msg_control; /* ancillary data, see below */
91447636 187 socklen_t msg_controllen; /* ancillary data buffer len */
2d21ac55 188 int msg_flags; /* flags on received message */
9bccf70c
A
189};
190.Ed
191.Pp
192Here
193.Fa msg_name
194and
195.Fa msg_namelen
2d21ac55 196specify the destination address if the socket is unconnected;
9bccf70c
A
197.Fa msg_name
198may be given as a null pointer if no names are desired or required.
2d21ac55
A
199The
200.Fa msg_iov
9bccf70c
A
201and
202.Fa msg_iovlen
2d21ac55 203arguments
9bccf70c
A
204describe scatter gather locations, as discussed in
205.Xr read 2 .
2d21ac55
A
206The
207.Fa msg_control
208argument,
9bccf70c
A
209which has length
210.Fa msg_controllen ,
211points to a buffer for other protocol control related messages
212or other miscellaneous ancillary data.
213The messages are of the form:
214.Bd -literal
215struct cmsghdr {
216 u_int cmsg_len; /* data byte count, including hdr */
217 int cmsg_level; /* originating protocol */
218 int cmsg_type; /* protocol-specific type */
219/* followed by
220 u_char cmsg_data[]; */
221};
222.Ed
2d21ac55
A
223.Pp
224As an example, one could use this to learn of changes
225in the data-stream in XNS/SPP,
226or in ISO, to obtain user-connection-request data by requesting a
227.Fn recvmsg
228with no data buffer provided immediately after an
9bccf70c 229.Fn accept
2d21ac55 230system call.
9bccf70c
A
231.Pp
232Open file descriptors are now passed as ancillary data for
233.Dv AF_UNIX
234domain sockets, with
235.Fa cmsg_level
236set to
237.Dv SOL_SOCKET
238and
239.Fa cmsg_type
240set to
241.Dv SCM_RIGHTS .
242.Pp
243The
244.Fa msg_flags
245field is set on return according to the message received.
246.Dv MSG_EOR
247indicates end-of-record;
248the data returned completed a record (generally used with sockets of type
249.Dv SOCK_SEQPACKET ) .
250.Dv MSG_TRUNC
251indicates that
2d21ac55
A
252the trailing portion of a datagram was discarded
253because the datagram was larger than the buffer supplied.
9bccf70c 254.Dv MSG_CTRUNC
2d21ac55
A
255indicates that some control data were discarded
256due to lack of space in the buffer for ancillary data.
9bccf70c
A
257.Dv MSG_OOB
258is returned to indicate that expedited or out-of-band data were received.
9bccf70c
A
259.Sh RETURN VALUES
260These calls return the number of bytes received, or -1
261if an error occurred.
2d21ac55
A
262.Pp
263For TCP sockets, the return value 0 means the peer has closed its
264half side of the connection.
9bccf70c
A
265.Sh ERRORS
266The calls fail if:
267.Bl -tag -width Er
2d21ac55
A
268.\" ===========
269.It Bq Er EAGAIN
270The socket is marked non-blocking, and the receive operation
271would block, or
272a receive timeout had been set,
273and the timeout expired before data were received.
274.\" ===========
9bccf70c
A
275.It Bq Er EBADF
276The argument
2d21ac55 277.Fa socket
9bccf70c 278is an invalid descriptor.
2d21ac55
A
279.\" ===========
280.It Bq Er ECONNRESET
281The connection is closed by the peer
282during a receive attempt on a socket.
283.\" ===========
284.It Bq Er EFAULT
285The receive buffer pointer(s) point outside the process's
286address space.
287.\" ===========
288.It Bq Er EINTR
289The receive was interrupted by delivery of a signal before
290any data were available.
291.\" ===========
292.It Bq Er EINVAL
293MSG_OOB is set, but no out-of-band data is available.
294.\" ===========
295.It Bq Er ENOBUFS
296An attempt to allocate a memory buffer fails.
297.\" ===========
9bccf70c
A
298.It Bq Er ENOTCONN
299The socket is associated with a connection-oriented protocol
300and has not been connected (see
301.Xr connect 2
302and
2d21ac55
A
303.Xr accept 2 ) .
304.\" ===========
9bccf70c
A
305.It Bq Er ENOTSOCK
306The argument
2d21ac55 307.Fa socket
9bccf70c 308does not refer to a socket.
2d21ac55
A
309.\" ===========
310.It Bq Er EOPNOTSUPP
311The type and/or protocol of
312.Fa socket
313do not support the option(s) specified in
314.Fa flags .
315.\" ===========
316.It Bq Er ETIMEDOUT
317The connection timed out.
318.El
319.Pp
320The
321.Fn recvfrom
322call may also fail if:
323.Bl -tag -width Er
324.\" ===========
325.It Bq Er EINVAL
326The total of the iov_len values overflows a ssize_t.
327.El
328.Pp
329The
330.Fn recvmsg
331call may also fail if:
332.Bl -tag -width Er
333.\" ===========
334.It Bq Er EMSGSIZE
335The requested message size is invalid.
336.\" ===========
337.It Bq Er ENOMEM
338Insufficient memory is available.
9bccf70c
A
339.El
340.Sh SEE ALSO
341.Xr fcntl 2 ,
2d21ac55 342.Xr getsockopt 2 ,
9bccf70c
A
343.Xr read 2 ,
344.Xr select 2 ,
9bccf70c
A
345.Xr socket 2
346.Sh HISTORY
347The
348.Fn recv
2d21ac55 349function appeared in
9bccf70c 350.Bx 4.2 .