summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libc/sys/listen.222
-rw-r--r--sys/kern/uipc_socket.c8
2 files changed, 25 insertions, 5 deletions
diff --git a/lib/libc/sys/listen.2 b/lib/libc/sys/listen.2
index bd6abde..e09d1ca 100644
--- a/lib/libc/sys/listen.2
+++ b/lib/libc/sys/listen.2
@@ -28,7 +28,7 @@
.\" From: @(#)listen.2 8.2 (Berkeley) 12/11/93
.\" $FreeBSD$
.\"
-.Dd August 29, 2005
+.Dd October 20, 2012
.Dt LISTEN 2
.Os
.Sh NAME
@@ -102,15 +102,15 @@ of service attacks are no longer necessary.
The
.Xr sysctl 3
MIB variable
-.Va kern.ipc.somaxconn
+.Va kern.ipc.soacceptqueue
specifies a hard limit on
.Fa backlog ;
if a value greater than
-.Va kern.ipc.somaxconn
+.Va kern.ipc.soacceptqueue
or less than zero is specified,
.Fa backlog
is silently forced to
-.Va kern.ipc.somaxconn .
+.Va kern.ipc.soacceptqueue .
.Sh INTERACTION WITH ACCEPT FILTERS
When accept filtering is used on a socket, a second queue will
be used to hold sockets that have connected, but have not yet
@@ -168,3 +168,17 @@ at run-time, and to use a negative
.Fa backlog
to request the maximum allowable value, was introduced in
.Fx 2.2 .
+The
+.Va kern.ipc.somaxconn
+.Xr sysctl 3
+has been replaced with
+.Va kern.ipc.soacceptqueue
+in
+.Fx 10.0
+to prevent confusion its actual functionality.
+The original
+.Xr sysctl 3
+.Va kern.ipc.somaxconn
+is still available but hidden from a
+.Xr sysctl 3
+-a output so that existing applications and scripts continue to work.
diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c
index 6b5581f..a964cf2 100644
--- a/sys/kern/uipc_socket.c
+++ b/sys/kern/uipc_socket.c
@@ -185,6 +185,8 @@ MALLOC_DEFINE(M_PCB, "pcb", "protocol control block");
/*
* Limit on the number of connections in the listen queue waiting
* for accept(2).
+ * NB: The orginal sysctl somaxconn is still available but hidden
+ * to prevent confusion about the actually purpose of this number.
*/
static int somaxconn = SOMAXCONN;
@@ -205,9 +207,13 @@ sysctl_somaxconn(SYSCTL_HANDLER_ARGS)
somaxconn = val;
return (0);
}
-SYSCTL_PROC(_kern_ipc, KIPC_SOMAXCONN, somaxconn, CTLTYPE_UINT | CTLFLAG_RW,
+SYSCTL_PROC(_kern_ipc, OID_AUTO, soacceptqueue, CTLTYPE_UINT | CTLFLAG_RW,
0, sizeof(int), sysctl_somaxconn, "I",
"Maximum listen socket pending connection accept queue size");
+SYSCTL_PROC(_kern_ipc, KIPC_SOMAXCONN, somaxconn,
+ CTLTYPE_UINT | CTLFLAG_RW | CTLFLAG_SKIP,
+ 0, sizeof(int), sysctl_somaxconn, "I",
+ "Maximum listen socket pending connection accept queue size (compat)");
static int numopensockets;
SYSCTL_INT(_kern_ipc, OID_AUTO, numopensockets, CTLFLAG_RD,
OpenPOWER on IntegriCloud