 f14fb60209
			
		
	
	
		f14fb60209
		
	
	
	
	
		
			
			* Updating common/lib * Updating lib/csu * Updating lib/libc * Updating libexec/ld.elf_so * Corrected test on __minix in featuretest to actually follow the meaning of the comment. * Cleaned up _REENTRANT-related defintions. * Disabled -D_REENTRANT for libfetch * Removing some unneeded __NBSD_LIBC defines and tests Change-Id: Ic1394baef74d11b9f86b312f5ff4bbc3cbf72ce2
		
			
				
	
	
		
			234 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			234 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: accept.2,v 1.29 2012/03/19 09:34:36 plunky Exp $
 | |
| .\"
 | |
| .\" Copyright (c) 1983, 1990, 1991, 1993
 | |
| .\"	The Regents of the University of California.  All rights reserved.
 | |
| .\"
 | |
| .\" Redistribution and use in source and binary forms, with or without
 | |
| .\" modification, are permitted provided that the following conditions
 | |
| .\" are met:
 | |
| .\" 1. Redistributions of source code must retain the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer.
 | |
| .\" 2. Redistributions in binary form must reproduce the above copyright
 | |
| .\"    notice, this list of conditions and the following disclaimer in the
 | |
| .\"    documentation and/or other materials provided with the distribution.
 | |
| .\" 3. Neither the name of the University nor the names of its contributors
 | |
| .\"    may be used to endorse or promote products derived from this software
 | |
| .\"    without specific prior written permission.
 | |
| .\"
 | |
| .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
 | |
| .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
| .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
| .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
 | |
| .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | |
| .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | |
| .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | |
| .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | |
| .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | |
| .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | |
| .\" SUCH DAMAGE.
 | |
| .\"
 | |
| .\"     @(#)accept.2	8.2 (Berkeley) 12/11/93
 | |
| .\"
 | |
| .Dd March 19, 2012
 | |
| .Dt ACCEPT 2
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm accept ,
 | |
| .Nm paccept
 | |
| .Nd accept a connection on a socket
 | |
| .Sh LIBRARY
 | |
| .Lb libc
 | |
| .Sh SYNOPSIS
 | |
| .In sys/socket.h
 | |
| .Ft int
 | |
| .Fn accept "int s" "struct sockaddr * restrict addr" "socklen_t * restrict addrlen"
 | |
| .Ft int
 | |
| .Fn paccept "int s" "struct sockaddr * restrict addr" "socklen_t * restrict addrlen" "const sigset_t * restrict sigmask" "int flags"
 | |
| .Sh DESCRIPTION
 | |
| The argument
 | |
| .Fa s
 | |
| is a socket that has been created with
 | |
| .Xr socket 2 ,
 | |
| bound to an address with
 | |
| .Xr bind 2 ,
 | |
| and is listening for connections after a
 | |
| .Xr listen 2 .
 | |
| The
 | |
| .Fn accept
 | |
| argument
 | |
| extracts the first connection request on the queue of pending
 | |
| connections, creates a new socket with the same properties of
 | |
| .Fa s
 | |
| and allocates a new file descriptor
 | |
| for the socket.
 | |
| If no pending connections are
 | |
| present on the queue, and the socket is not marked
 | |
| as non-blocking,
 | |
| .Fn accept
 | |
| blocks the caller until a connection is present.
 | |
| If the socket is marked non-blocking and no pending
 | |
| connections are present on the queue,
 | |
| .Fn accept
 | |
| returns an error as described below.
 | |
| The accepted socket
 | |
| may not be used
 | |
| to accept more connections.
 | |
| The original socket
 | |
| .Fa s
 | |
| remains open.
 | |
| .Pp
 | |
| The argument
 | |
| .Fa addr
 | |
| is a result parameter that is filled in with
 | |
| the address of the connecting entity,
 | |
| as known to the communications layer.
 | |
| The exact format of the
 | |
| .Fa addr
 | |
| parameter is determined by the domain in which the communication
 | |
| is occurring.
 | |
| The
 | |
| .Fa addrlen
 | |
| is a value-result parameter; it should initially contain the
 | |
| amount of space pointed to by
 | |
| .Fa addr ;
 | |
| on return it will contain the actual length (in bytes) of the
 | |
| address returned.
 | |
| This call
 | |
| is used with connection-based socket types, currently with
 | |
| .Dv SOCK_STREAM .
 | |
| .Pp
 | |
| It is possible to
 | |
| .Xr select 2
 | |
| or
 | |
| .Xr poll 2
 | |
| a socket for the purposes of doing an
 | |
| .Fn accept
 | |
| by selecting or polling it for read.
 | |
| .Pp
 | |
| For certain protocols which require an explicit confirmation,
 | |
| such as
 | |
| .Tn ISO
 | |
| or
 | |
| .Tn DATAKIT ,
 | |
| .Fn accept
 | |
| can be thought of
 | |
| as merely dequeuing the next connection
 | |
| request and not implying confirmation.
 | |
| Confirmation can be implied by a normal read or write on the new
 | |
| file descriptor, and rejection can be implied by closing the
 | |
| new socket.
 | |
| .Pp
 | |
| One can obtain user connection request data without confirming
 | |
| the connection by issuing a
 | |
| .Xr recvmsg 2
 | |
| call with an
 | |
| .Fa msg_iovlen
 | |
| of 0 and a non-zero
 | |
| .Fa msg_controllen ,
 | |
| or by issuing a
 | |
| .Xr getsockopt 2
 | |
| request.
 | |
| Similarly, one can provide user connection rejection information
 | |
| by issuing a
 | |
| .Xr sendmsg 2
 | |
| call with providing only the control information,
 | |
| or by calling
 | |
| .Xr setsockopt 2 .
 | |
| .Pp
 | |
| The
 | |
| .Fn paccept
 | |
| function behaves exactly like
 | |
| .Fn accept ,
 | |
| but it also allows to set the following
 | |
| .Fa flags
 | |
| on the returned file descriptor:
 | |
| .Bl -column SOCK_NONBLOCK -offset indent
 | |
| .It Dv SOCK_CLOEXEC
 | |
| Set the close on exec property.
 | |
| .It Dv SOCK_NONBLOCK
 | |
| Sets non-blocking I/O.
 | |
| .El
 | |
| .Pp
 | |
| It can also temporarily replace the signal mask of the calling thread if
 | |
| .Fa sigmask
 | |
| is a
 | |
| .Pf non- Dv NULL
 | |
| pointer, then the
 | |
| .Fn paccept
 | |
| function shall replace the signal mask of the caller by the set of
 | |
| signals pointed to by
 | |
| .Fa sigmask
 | |
| before waiting for a connection, and shall restore the signal mask
 | |
| of the calling thread before returning.
 | |
| .Sh RETURN VALUES
 | |
| The
 | |
| .Fn accept
 | |
| and
 | |
| .Fn paccept
 | |
| calls return \-1 on error.
 | |
| If they succeed, they return a non-negative
 | |
| integer that is a descriptor for the accepted socket.
 | |
| .Sh COMPATIBILITY
 | |
| The
 | |
| .Fn accept
 | |
| implementation makes the new file descriptor inherit file flags
 | |
| (like
 | |
| .Dv O_NONBLOCK )
 | |
| from the listening socket.
 | |
| It's a traditional behaviour for BSD derivative systems.
 | |
| On the other hand, there are implementations which don't do so.
 | |
| Linux is an example of such implementations.
 | |
| Portable programs should not rely on either of the behaviours.
 | |
| .Sh ERRORS
 | |
| The
 | |
| .Fn accept
 | |
| will fail if:
 | |
| .Bl -tag -width Er
 | |
| .It Bq Er EAGAIN
 | |
| The socket is marked non-blocking and no connections
 | |
| are present to be accepted.
 | |
| .It Bq Er EBADF
 | |
| The descriptor is invalid.
 | |
| .It Bq Er ECONNABORTED
 | |
| A connection has been aborted.
 | |
| .It Bq Er EFAULT
 | |
| The
 | |
| .Fa addr
 | |
| parameter is not in a writable part of the
 | |
| user address space.
 | |
| .It Bq Er EINTR
 | |
| The
 | |
| .Fn accept
 | |
| call has been interrupted by a signal.
 | |
| .It Bq Er EINVAL
 | |
| The socket has not been set up to accept connections (using
 | |
| .Xr bind 2
 | |
| and
 | |
| .Xr listen 2 ) .
 | |
| .It Bq Er EMFILE
 | |
| The per-process descriptor table is full.
 | |
| .It Bq Er ENFILE
 | |
| The system file table is full.
 | |
| .It Bq Er ENOTSOCK
 | |
| The descriptor references a file, not a socket.
 | |
| .It Bq Er EOPNOTSUPP
 | |
| The referenced socket is not of type
 | |
| .Dv SOCK_STREAM .
 | |
| .El
 | |
| .Sh SEE ALSO
 | |
| .Xr bind 2 ,
 | |
| .Xr connect 2 ,
 | |
| .Xr listen 2 ,
 | |
| .Xr poll 2 ,
 | |
| .Xr select 2 ,
 | |
| .Xr socket 2
 | |
| .Sh HISTORY
 | |
| The
 | |
| .Fn accept
 | |
| function appeared in
 | |
| .Bx 4.2 .
 | |
| The
 | |
| .Fn paccept
 | |
| function is inspired from Linux and appeared in
 | |
| .Nx 6.0 .
 |