]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/libc/sys/accept.2
Import Magerya Vitaly's ldns-host, and build it instead of the BIND version
[FreeBSD/FreeBSD.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 May 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 Portable programs should not rely on the
159 .Dv O_NONBLOCK
160 and
161 .Dv O_ASYNC
162 properties and the signal destination being inherited,
163 but should set them explicitly using
164 .Xr fcntl 2 .
165 .Sh RETURN VALUES
166 These calls return \-1 on error.
167 If they succeed, they return a non-negative
168 integer that is a descriptor for the accepted socket.
169 .Sh ERRORS
170 The
171 .Fn accept
172 and
173 .Fn accept4
174 system calls will fail if:
175 .Bl -tag -width Er
176 .It Bq Er EBADF
177 The descriptor is invalid.
178 .It Bq Er EINTR
179 The
180 .Fn accept
181 operation was interrupted.
182 .It Bq Er EMFILE
183 The per-process descriptor table is full.
184 .It Bq Er ENFILE
185 The system file table is full.
186 .It Bq Er ENOTSOCK
187 The descriptor references a file, not a socket.
188 .It Bq Er EINVAL
189 .Xr listen 2
190 has not been called on the socket descriptor.
191 .It Bq Er EFAULT
192 The
193 .Fa addr
194 argument is not in a writable part of the
195 user address space.
196 .It Bq Er EWOULDBLOCK
197 The socket is marked non-blocking and no connections
198 are present to be accepted.
199 .It Bq Er ECONNABORTED
200 A connection arrived, but it was closed while waiting
201 on the listen queue.
202 .El
203 .Pp
204 The
205 .Fn accept4
206 system call will also fail if:
207 .Bl -tag -width Er
208 .It Bq Er EINVAL
209 The
210 .Fa flags
211 argument is invalid.
212 .El
213 .Sh SEE ALSO
214 .Xr bind 2 ,
215 .Xr connect 2 ,
216 .Xr getpeername 2 ,
217 .Xr getsockname 2 ,
218 .Xr listen 2 ,
219 .Xr select 2 ,
220 .Xr socket 2 ,
221 .Xr accept_filter 9
222 .Sh HISTORY
223 The
224 .Fn accept
225 system call appeared in
226 .Bx 4.2 .
227 .Pp
228 The
229 .Fn accept4
230 system call appeared in
231 .Fx 10.0 .