]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - lib/libc/sys/accept.2
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / lib / libc / sys / accept.2
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 .\" 4. Neither the name of the University nor the names of its contributors
13 .\"    may be used to endorse or promote products derived from this software
14 .\"    without specific prior written permission.
15 .\"
16 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 .\" SUCH DAMAGE.
27 .\"
28 .\"     @(#)accept.2    8.2 (Berkeley) 12/11/93
29 .\" $FreeBSD$
30 .\"
31 .Dd October 1, 2013
32 .Dt ACCEPT 2
33 .Os
34 .Sh NAME
35 .Nm accept
36 .Nd accept a connection on a socket
37 .Sh LIBRARY
38 .Lb libc
39 .Sh SYNOPSIS
40 .In sys/types.h
41 .In sys/socket.h
42 .Ft int
43 .Fn accept "int s" "struct sockaddr * restrict addr" "socklen_t * restrict addrlen"
44 .Ft int
45 .Fn accept4 "int s" "struct sockaddr * restrict addr" "socklen_t * restrict addrlen" "int flags"
46 .Sh DESCRIPTION
47 The argument
48 .Fa s
49 is a socket that has been created with
50 .Xr socket 2 ,
51 bound to an address with
52 .Xr bind 2 ,
53 and is listening for connections after a
54 .Xr listen 2 .
55 The
56 .Fn accept
57 system call extracts the first connection request on the
58 queue of pending connections, creates a new socket,
59 and allocates a new file descriptor for the socket which
60 inherits the state of the
61 .Dv O_NONBLOCK
62 and
63 .Dv O_ASYNC
64 properties and the destination of
65 .Dv SIGIO
66 and
67 .Dv SIGURG
68 signals from the original socket
69 .Fa s .
70 .Pp
71 The
72 .Fn accept4
73 system call is similar,
74 but the
75 .Dv O_NONBLOCK
76 property of the new socket is instead determined by the
77 .Dv SOCK_NONBLOCK
78 flag in the
79 .Fa flags
80 argument,
81 the
82 .Dv O_ASYNC
83 property is cleared,
84 the signal destination is cleared
85 and the close-on-exec flag on the new file descriptor can be set via the
86 .Dv SOCK_CLOEXEC
87 flag in the
88 .Fa flags
89 argument.
90 .Pp
91 If no pending connections are
92 present on the queue, and the original socket
93 is not marked as non-blocking,
94 .Fn accept
95 blocks the caller until a connection is present.
96 If the original socket
97 is marked non-blocking and no pending
98 connections are present on the queue,
99 .Fn accept
100 returns an error as described below.
101 The accepted socket
102 may not be used
103 to accept more connections.
104 The original socket
105 .Fa s
106 remains open.
107 .Pp
108 The argument
109 .Fa addr
110 is a result argument that is filled-in with
111 the address of the connecting entity,
112 as known to the communications layer.
113 The exact format of the
114 .Fa addr
115 argument is determined by the domain in which the communication
116 is occurring.
117 A null pointer may be specified for
118 .Fa addr
119 if the address information is not desired;
120 in this case,
121 .Fa addrlen
122 is not used and should also be null.
123 Otherwise, the
124 .Fa addrlen
125 argument
126 is a value-result argument; it should initially contain the
127 amount of space pointed to by
128 .Fa addr ;
129 on return it will contain the actual length (in bytes) of the
130 address returned.
131 This call
132 is used with connection-based socket types, currently with
133 .Dv SOCK_STREAM .
134 .Pp
135 It is possible to
136 .Xr select 2
137 a socket for the purposes of doing an
138 .Fn accept
139 by selecting it for read.
140 .Pp
141 For certain protocols which require an explicit confirmation,
142 such as
143 .Tn ISO
144 or
145 .Tn DATAKIT ,
146 .Fn accept
147 can be thought of
148 as merely dequeueing the next connection
149 request and not implying confirmation.
150 Confirmation can be implied by a normal read or write on the new
151 file descriptor, and rejection can be implied by closing the
152 new socket.
153 .Pp
154 For some applications, performance may be enhanced by using an
155 .Xr accept_filter 9
156 to pre-process incoming connections.
157 .Pp
158 When using
159 .Fn accept ,
160 portable programs should not rely on the
161 .Dv O_NONBLOCK
162 and
163 .Dv O_ASYNC
164 properties and the signal destination being inherited,
165 but should set them explicitly using
166 .Xr fcntl 2 ;
167 .Fn accept4
168 sets these properties consistently,
169 but may not be fully portable across
170 .Ux
171 platforms.
172 .Sh RETURN VALUES
173 These calls return \-1 on error.
174 If they succeed, they return a non-negative
175 integer that is a descriptor for the accepted socket.
176 .Sh ERRORS
177 The
178 .Fn accept
179 and
180 .Fn accept4
181 system calls will fail if:
182 .Bl -tag -width Er
183 .It Bq Er EBADF
184 The descriptor is invalid.
185 .It Bq Er EINTR
186 The
187 .Fn accept
188 operation was interrupted.
189 .It Bq Er EMFILE
190 The per-process descriptor table is full.
191 .It Bq Er ENFILE
192 The system file table is full.
193 .It Bq Er ENOTSOCK
194 The descriptor references a file, not a socket.
195 .It Bq Er EINVAL
196 .Xr listen 2
197 has not been called on the socket descriptor.
198 .It Bq Er EFAULT
199 The
200 .Fa addr
201 argument is not in a writable part of the
202 user address space.
203 .It Bq Er EWOULDBLOCK
204 The socket is marked non-blocking and no connections
205 are present to be accepted.
206 .It Bq Er ECONNABORTED
207 A connection arrived, but it was closed while waiting
208 on the listen queue.
209 .El
210 .Pp
211 The
212 .Fn accept4
213 system call will also fail if:
214 .Bl -tag -width Er
215 .It Bq Er EINVAL
216 The
217 .Fa flags
218 argument is invalid.
219 .El
220 .Sh SEE ALSO
221 .Xr bind 2 ,
222 .Xr connect 2 ,
223 .Xr getpeername 2 ,
224 .Xr getsockname 2 ,
225 .Xr listen 2 ,
226 .Xr select 2 ,
227 .Xr socket 2 ,
228 .Xr accept_filter 9
229 .Sh HISTORY
230 The
231 .Fn accept
232 system call appeared in
233 .Bx 4.2 .
234 .Pp
235 The
236 .Fn accept4
237 system call appeared in
238 .Fx 10.0 .