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 47The argument 48.Fa s 49is a socket that has been created with 50.Xr socket 2 , 51bound to an address with 52.Xr bind 2 , 53and is listening for connections after a 54.Xr listen 2 . 55The 56.Fn accept 57system call extracts the first connection request on the 58queue of pending connections, creates a new socket, 59and allocates a new file descriptor for the socket which 60inherits the state of the 61.Dv O_NONBLOCK 62and 63.Dv O_ASYNC 64properties and the destination of 65.Dv SIGIO 66and 67.Dv SIGURG 68signals from the original socket 69.Fa s . 70.Pp 71The 72.Fn accept4 73system call is similar, 74but the 75.Dv O_NONBLOCK 76property of the new socket is instead determined by the 77.Dv SOCK_NONBLOCK 78flag in the 79.Fa flags 80argument, 81the 82.Dv O_ASYNC 83property is cleared, 84the signal destination is cleared 85and the close-on-exec flag on the new file descriptor can be set via the 86.Dv SOCK_CLOEXEC 87flag in the 88.Fa flags 89argument. 90.Pp 91If no pending connections are 92present on the queue, and the original socket 93is not marked as non-blocking, 94.Fn accept 95blocks the caller until a connection is present. 96If the original socket 97is marked non-blocking and no pending 98connections are present on the queue, 99.Fn accept 100returns an error as described below. 101The accepted socket 102may not be used 103to accept more connections. 104The original socket 105.Fa s 106remains open. 107.Pp 108The argument 109.Fa addr 110is a result argument that is filled-in with 111the address of the connecting entity, 112as known to the communications layer. 113The exact format of the 114.Fa addr 115argument is determined by the domain in which the communication 116is occurring. 117A null pointer may be specified for 118.Fa addr 119if the address information is not desired; 120in this case, 121.Fa addrlen 122is not used and should also be null. 123Otherwise, the 124.Fa addrlen 125argument 126is a value-result argument; it should initially contain the 127amount of space pointed to by 128.Fa addr ; 129on return it will contain the actual length (in bytes) of the 130address returned. 131This call 132is used with connection-based socket types, currently with 133.Dv SOCK_STREAM . 134.Pp 135It is possible to 136.Xr select 2 137a socket for the purposes of doing an 138.Fn accept 139by selecting it for read. 140.Pp 141For certain protocols which require an explicit confirmation, 142such as 143.Tn ISO 144or 145.Tn DATAKIT , 146.Fn accept 147can be thought of 148as merely dequeueing the next connection 149request and not implying confirmation. 150Confirmation can be implied by a normal read or write on the new 151file descriptor, and rejection can be implied by closing the 152new socket. 153.Pp 154For some applications, performance may be enhanced by using an 155.Xr accept_filter 9 156to pre-process incoming connections. 157.Pp 158Portable programs should not rely on the 159.Dv O_NONBLOCK 160and 161.Dv O_ASYNC 162properties and the signal destination being inherited, 163but should set them explicitly using 164.Xr fcntl 2 . 165.Sh RETURN VALUES 166These calls return \-1 on error. 167If they succeed, they return a non-negative 168integer that is a descriptor for the accepted socket. 169.Sh ERRORS 170The 171.Fn accept 172and 173.Fn accept4 174system calls will fail if: 175.Bl -tag -width Er 176.It Bq Er EBADF 177The descriptor is invalid. 178.It Bq Er EINTR 179The 180.Fn accept 181operation was interrupted. 182.It Bq Er EMFILE 183The per-process descriptor table is full. 184.It Bq Er ENFILE 185The system file table is full. 186.It Bq Er ENOTSOCK 187The descriptor references a file, not a socket. 188.It Bq Er EINVAL 189.Xr listen 2 190has not been called on the socket descriptor. 191.It Bq Er EFAULT 192The 193.Fa addr 194argument is not in a writable part of the 195user address space. 196.It Bq Er EWOULDBLOCK 197The socket is marked non-blocking and no connections 198are present to be accepted. 199.It Bq Er ECONNABORTED 200A connection arrived, but it was closed while waiting 201on the listen queue. 202.El 203.Pp 204The 205.Fn accept4 206system call will also fail if: 207.Bl -tag -width Er 208.It Bq Er EINVAL 209The 210.Fa flags 211argument 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 223The 224.Fn accept 225system call appeared in 226.Bx 4.2 . 227.Pp 228The 229.Fn accept4 230system call appeared in 231.Fx 10.0 . 232