]> git.saurik.com Git - apple/xnu.git/blame_incremental - bsd/man/man2/recv.2
xnu-2782.40.9.tar.gz
[apple/xnu.git] / bsd / man / man2 / recv.2
... / ...
CommitLineData
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.\"
34.Dd May 15, 2006
35.Dt RECV 2
36.Os
37.Sh NAME
38.Nm recv ,
39.Nm recvfrom ,
40.Nm recvmsg
41.Nd receive a message from a socket
42.Sh LIBRARY
43.Lb libc
44.Sh SYNOPSIS
45.In sys/socket.h
46.Ft ssize_t
47.Fo recv
48.Fa "int socket"
49.Fa "void *buffer"
50.Fa "size_t length"
51.Fa "int flags"
52.Fc
53.Ft ssize_t
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
62.Ft ssize_t
63.Fo recvmsg
64.Fa "int socket"
65.Fa "struct msghdr *message"
66.Fa "int flags"
67.Fc
68.Sh DESCRIPTION
69The
70.Fn recvfrom
71and
72.Fn recvmsg
73system calls
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
79.Fa address
80is not a null pointer
81and the socket is not connection-oriented,
82the source address of the message is filled in.
83The
84.Fa address_len
85argument
86is a value-result argument, initialized to the size of
87the buffer associated with
88.Fa address ,
89and modified on return to indicate the actual size of the
90address stored there.
91.Pp
92The
93.Fn recv
94function is normally used only on a
95.Em connected
96socket (see
97.Xr connect 2 )
98and is identical to
99.Fn recvfrom
100with a
101null pointer passed as its
102.Fa address
103argument.
104As it is redundant, it may not be supported in future releases.
105.Pp
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
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
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.
138.Pp
139The
140.Fa flags
141argument to a
142.Fn recv
143function is formed by
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
151.Pp
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.
158The
159.Dv MSG_PEEK
160flag causes the receive operation to return data
161from the beginning of the receive queue without removing that
162data from the queue.
163Thus, a subsequent receive call will return the same data.
164The
165.Dv MSG_WAITALL
166flag requests that the operation block until
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
174system call uses a
175.Fa msghdr
176structure to minimize the number of directly supplied arguments.
177This structure has the following form, as defined in
178.In sys/socket.h :
179.Pp
180.Bd -literal
181struct msghdr {
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 */
187 socklen_t msg_controllen; /* ancillary data buffer len */
188 int msg_flags; /* flags on received message */
189};
190.Ed
191.Pp
192Here
193.Fa msg_name
194and
195.Fa msg_namelen
196specify the destination address if the socket is unconnected;
197.Fa msg_name
198may be given as a null pointer if no names are desired or required.
199.Pp
200The
201.Fa msg_iov
202and
203.Fa msg_iovlen
204arguments
205describe scatter gather locations, as discussed in
206.Xr read 2 .
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
219The
220.Fa msg_control
221argument,
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
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
242.Fn accept
243system call.
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
265the trailing portion of a datagram was discarded
266because the datagram was larger than the buffer supplied.
267.Dv MSG_CTRUNC
268indicates that some control data were discarded
269due to lack of space in the buffer for ancillary data.
270.Dv MSG_OOB
271is returned to indicate that expedited or out-of-band data were received.
272.Sh RETURN VALUES
273These calls return the number of bytes received, or -1
274if an error occurred.
275.Pp
276For TCP sockets, the return value 0 means the peer has closed its
277half side of the connection.
278.Sh ERRORS
279The calls fail if:
280.Bl -tag -width Er
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.\" ===========
288.It Bq Er EBADF
289The argument
290.Fa socket
291is an invalid descriptor.
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.\" ===========
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
316.Xr accept 2 ) .
317.\" ===========
318.It Bq Er ENOTSOCK
319The argument
320.Fa socket
321does not refer to a socket.
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
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 .
354.\" ===========
355.It Bq Er ENOMEM
356Insufficient memory is available.
357.El
358.Sh SEE ALSO
359.Xr fcntl 2 ,
360.Xr getsockopt 2 ,
361.Xr read 2 ,
362.Xr select 2 ,
363.Xr socket 2
364.Sh HISTORY
365The
366.Fn recv
367function appeared in
368.Bx 4.2 .