|
|
1.1 root 1: .\" Copyright (c) 1983 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)accept.2 6.3 (Berkeley) 5/22/86
6: .\"
7: .TH ACCEPT 2 "May 22, 1986"
8: .UC 5
9: .SH NAME
10: accept \- accept a connection on a socket
11: .SH SYNOPSIS
12: .ft B
13: .nf
14: #include <sys/types.h>
15: #include <sys/socket.h>
16: .PP
17: .ft B
18: ns = accept(s, addr, addrlen)
19: int ns, s;
20: struct sockaddr *addr;
21: int *addrlen;
22: .fi
23: .SH DESCRIPTION
24: The argument
25: .I s
26: is a socket that has been created with
27: .IR socket (2),
28: bound to an address with
29: .IR bind (2),
30: and is listening for connections after a
31: .IR listen (2).
32: .I Accept
33: extracts the first connection
34: on the queue of pending connections, creates
35: a new socket with the same properties of
36: .I s
37: and allocates a new file descriptor,
38: .IR ns ,
39: for the socket. If no pending connections are
40: present on the queue, and the socket is not marked
41: as non-blocking,
42: .I accept
43: blocks the caller until a connection is present.
44: If the socket is marked non-blocking and no pending
45: connections are present on the queue,
46: .I accept
47: returns an error as described below.
48: The accepted socket,
49: .IR ns ,
50: may not be used
51: to accept more connections. The original socket
52: .I s
53: remains open.
54: .PP
55: The argument
56: .I addr
57: is a result parameter that is filled in with
58: the address of the connecting entity,
59: as known to the communications layer.
60: The exact format of the
61: .I addr
62: parameter is determined by the domain in which the communication
63: is occurring.
64: The
65: .I addrlen
66: is a value-result parameter; it should initially contain the
67: amount of space pointed to by
68: .IR addr ;
69: on return it will contain the actual length (in bytes) of the
70: address returned.
71: This call
72: is used with connection-based socket types, currently with SOCK_STREAM.
73: .PP
74: It is possible to
75: .IR select (2)
76: a socket for the purposes of doing an
77: .I accept
78: by selecting it for read.
79: .SH "RETURN VALUE
80: The call returns \-1 on error. If it succeeds, it returns a non-negative
81: integer that is a descriptor for the accepted socket.
82: .SH ERRORS
83: The \fIaccept\fP will fail if:
84: .TP 20
85: [EBADF]
86: The descriptor is invalid.
87: .TP 20
88: [ENOTSOCK]
89: The descriptor references a file, not a socket.
90: .TP 20
91: [EOPNOTSUPP]
92: The referenced socket is not of type SOCK_STREAM.
93: .TP 20
94: [EFAULT]
95: The \fIaddr\fP parameter is not in a writable part of the
96: user address space.
97: .TP 20
98: [EWOULDBLOCK]
99: The socket is marked non-blocking and no connections
100: are present to be accepted.
101: .SH SEE ALSO
102: bind(2), connect(2), listen(2), select(2), socket(2)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.