xref: /freebsd/lib/libsys/listen.2 (revision f5f40dd63bc7acbb5312b26ac1ea1103c12352a6)
1.\" Copyright (c) 1983, 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.\" 3. 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.Dd April 30, 2023
29.Dt LISTEN 2
30.Os
31.Sh NAME
32.Nm listen
33.Nd listen for connections on a socket
34.Sh LIBRARY
35.Lb libc
36.Sh SYNOPSIS
37.In sys/socket.h
38.Ft int
39.Fn listen "int s" "int backlog"
40.Sh DESCRIPTION
41To accept connections, a socket
42is first created with
43.Xr socket 2 ,
44a willingness to accept incoming connections and
45a queue limit for incoming connections are specified with
46.Fn listen ,
47and then the connections are
48accepted with
49.Xr accept 2 .
50The
51.Fn listen
52system call applies only to sockets of type
53.Dv SOCK_STREAM
54or
55.Dv SOCK_SEQPACKET .
56.Pp
57The
58.Fa backlog
59argument defines the maximum length the queue of
60pending connections may grow to.
61The real maximum queue length will be 1.5 times more than the value
62specified in the
63.Fa backlog
64argument.
65A subsequent
66.Fn listen
67system call on the listening socket allows the caller to change the maximum
68queue length using a new
69.Fa backlog
70argument.
71If a connection
72request arrives with the queue full the client may
73receive an error with an indication of
74.Er ECONNREFUSED ,
75or, in the case of TCP, the connection will be
76silently dropped.
77.Pp
78Current queue lengths of listening sockets can be queried using
79.Xr netstat 1
80command.
81.Pp
82Note that before
83.Fx 4.5
84and the introduction of the syncache,
85the
86.Fa backlog
87argument also determined the length of the incomplete
88connection queue, which held TCP sockets in the process
89of completing TCP's 3-way handshake.
90These incomplete connections
91are now held entirely in the syncache, which is unaffected by
92queue lengths.
93Inflated
94.Fa backlog
95values to help handle denial
96of service attacks are no longer necessary.
97.Pp
98The
99.Xr sysctl 3
100MIB variable
101.Va kern.ipc.soacceptqueue
102specifies a hard limit on
103.Fa backlog ;
104if a value greater than
105.Va kern.ipc.soacceptqueue
106or less than zero is specified,
107.Fa backlog
108is silently forced to
109.Va kern.ipc.soacceptqueue .
110.Pp
111If the listen queue overflows, the kernel will emit a syslog message
112using default priority LOG_DEBUG (7).
113The
114.Xr sysctl 3
115MIB variable
116.Va kern.ipc.sooverprio
117may be used to change this priority to any value in a range of 0..7
118(LOG_EMERG..LOG_DEBUG).
119See
120.Xr syslog 3
121for details.
122It may be set to -1 to disable these messages.
123.Pp
124The variable
125.Va kern.ipc.sooverinterval
126specifies a per-socket limit on how often the kernel will emit these messages.
127.Sh INTERACTION WITH ACCEPT FILTERS
128When accept filtering is used on a socket, a second queue will
129be used to hold sockets that have connected, but have not yet
130met their accept filtering criteria.
131Once the criteria has been
132met, these sockets will be moved over into the completed connection
133queue to be
134.Xr accept 2 Ns ed .
135If this secondary queue is full and a
136new connection comes in, the oldest socket which has not yet met
137its accept filter criteria will be terminated.
138.Pp
139This secondary queue, like the primary listen queue, is sized
140according to the
141.Fa backlog
142argument.
143.Sh RETURN VALUES
144.Rv -std listen
145.Sh ERRORS
146The
147.Fn listen
148system call
149will fail if:
150.Bl -tag -width Er
151.It Bq Er EBADF
152The argument
153.Fa s
154is not a valid descriptor.
155.It Bq Er EDESTADDRREQ
156The socket is not bound to a local address, and the protocol does not
157support listening on an unbound socket.
158.It Bq Er EINVAL
159The socket is already connected, or in the process of being connected.
160.It Bq Er ENOTSOCK
161The argument
162.Fa s
163is not a socket.
164.It Bq Er EOPNOTSUPP
165The socket is not of a type that supports the operation
166.Fn listen .
167.El
168.Sh SEE ALSO
169.Xr netstat 1 ,
170.Xr accept 2 ,
171.Xr connect 2 ,
172.Xr socket 2 ,
173.Xr sysctl 3 ,
174.Xr syslog 3 ,
175.Xr sysctl 8 ,
176.Xr accept_filter 9
177.Sh HISTORY
178The
179.Fn listen
180system call appeared in
181.Bx 4.2 .
182The ability to configure the maximum
183.Fa backlog
184at run-time, and to use a negative
185.Fa backlog
186to request the maximum allowable value, was introduced in
187.Fx 2.2 .
188The
189.Va kern.ipc.somaxconn
190.Xr sysctl 3
191has been replaced with
192.Va kern.ipc.soacceptqueue
193in
194.Fx 10.0
195to prevent confusion about its actual functionality.
196The original
197.Xr sysctl 3
198.Va kern.ipc.somaxconn
199is still available but hidden from a
200.Xr sysctl 3
201-a output so that existing applications and scripts continue to work.
202