]> git.saurik.com Git - apple/xnu.git/blame - bsd/man/man2/recv.2
xnu-1699.22.73.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.
b0d623f7 199.Pp
2d21ac55
A
200The
201.Fa msg_iov
9bccf70c
A
202and
203.Fa msg_iovlen
2d21ac55 204arguments
9bccf70c
A
205describe scatter gather locations, as discussed in
206.Xr read 2 .
b0d623f7
A
207.Fa msg_iovlen
208shall be set to the dimension of this array. In each
209.Fa iovec
210structure, the
211.Fa iov_base
212field specifies a storage area and the
213.Fa iov_len
214field gives its size in bytes. Each storage area indicated by
215.Fa msg_iov
216is filled with received data in turn until all of the received data
217is stored or all of the areas have been filled.
218.Pp
2d21ac55
A
219The
220.Fa msg_control
221argument,
9bccf70c
A
222which has length
223.Fa msg_controllen ,
224points to a buffer for other protocol control related messages
225or other miscellaneous ancillary data.
226The messages are of the form:
227.Bd -literal
228struct cmsghdr {
229 u_int cmsg_len; /* data byte count, including hdr */
230 int cmsg_level; /* originating protocol */
231 int cmsg_type; /* protocol-specific type */
232/* followed by
233 u_char cmsg_data[]; */
234};
235.Ed
2d21ac55
A
236.Pp
237As an example, one could use this to learn of changes
238in the data-stream in XNS/SPP,
239or in ISO, to obtain user-connection-request data by requesting a
240.Fn recvmsg
241with no data buffer provided immediately after an
9bccf70c 242.Fn accept
2d21ac55 243system call.
9bccf70c
A
244.Pp
245Open file descriptors are now passed as ancillary data for
246.Dv AF_UNIX
247domain sockets, with
248.Fa cmsg_level
249set to
250.Dv SOL_SOCKET
251and
252.Fa cmsg_type
253set to
254.Dv SCM_RIGHTS .
255.Pp
256The
257.Fa msg_flags
258field is set on return according to the message received.
259.Dv MSG_EOR
260indicates end-of-record;
261the data returned completed a record (generally used with sockets of type
262.Dv SOCK_SEQPACKET ) .
263.Dv MSG_TRUNC
264indicates that
2d21ac55
A
265the trailing portion of a datagram was discarded
266because the datagram was larger than the buffer supplied.
9bccf70c 267.Dv MSG_CTRUNC
2d21ac55
A
268indicates that some control data were discarded
269due to lack of space in the buffer for ancillary data.
9bccf70c
A
270.Dv MSG_OOB
271is returned to indicate that expedited or out-of-band data were received.
9bccf70c
A
272.Sh RETURN VALUES
273These calls return the number of bytes received, or -1
274if an error occurred.
2d21ac55
A
275.Pp
276For TCP sockets, the return value 0 means the peer has closed its
277half side of the connection.
9bccf70c
A
278.Sh ERRORS
279The calls fail if:
280.Bl -tag -width Er
2d21ac55
A
281.\" ===========
282.It Bq Er EAGAIN
283The socket is marked non-blocking, and the receive operation
284would block, or
285a receive timeout had been set,
286and the timeout expired before data were received.
287.\" ===========
9bccf70c
A
288.It Bq Er EBADF
289The argument
2d21ac55 290.Fa socket
9bccf70c 291is an invalid descriptor.
2d21ac55
A
292.\" ===========
293.It Bq Er ECONNRESET
294The connection is closed by the peer
295during a receive attempt on a socket.
296.\" ===========
297.It Bq Er EFAULT
298The receive buffer pointer(s) point outside the process's
299address space.
300.\" ===========
301.It Bq Er EINTR
302The receive was interrupted by delivery of a signal before
303any data were available.
304.\" ===========
305.It Bq Er EINVAL
306MSG_OOB is set, but no out-of-band data is available.
307.\" ===========
308.It Bq Er ENOBUFS
309An attempt to allocate a memory buffer fails.
310.\" ===========
9bccf70c
A
311.It Bq Er ENOTCONN
312The socket is associated with a connection-oriented protocol
313and has not been connected (see
314.Xr connect 2
315and
2d21ac55
A
316.Xr accept 2 ) .
317.\" ===========
9bccf70c
A
318.It Bq Er ENOTSOCK
319The argument
2d21ac55 320.Fa socket
9bccf70c 321does not refer to a socket.
2d21ac55
A
322.\" ===========
323.It Bq Er EOPNOTSUPP
324The type and/or protocol of
325.Fa socket
326do not support the option(s) specified in
327.Fa flags .
328.\" ===========
329.It Bq Er ETIMEDOUT
330The connection timed out.
331.El
332.Pp
333The
334.Fn recvfrom
335call may also fail if:
336.Bl -tag -width Er
337.\" ===========
338.It Bq Er EINVAL
339The total of the iov_len values overflows a ssize_t.
340.El
341.Pp
342The
343.Fn recvmsg
344call may also fail if:
345.Bl -tag -width Er
346.\" ===========
347.It Bq Er EMSGSIZE
b0d623f7
A
348The
349.Fa msg_iovlen
350member of the
351.Fa msghdr
352structure pointed to by message is less than or equal to 0, or is greater than
353.Dv IOV_MAX .
2d21ac55
A
354.\" ===========
355.It Bq Er ENOMEM
356Insufficient memory is available.
9bccf70c
A
357.El
358.Sh SEE ALSO
359.Xr fcntl 2 ,
2d21ac55 360.Xr getsockopt 2 ,
9bccf70c
A
361.Xr read 2 ,
362.Xr select 2 ,
9bccf70c
A
363.Xr socket 2
364.Sh HISTORY
365The
366.Fn recv
2d21ac55 367function appeared in
9bccf70c 368.Bx 4.2 .