From 217e86f8ee7f2275c5e35309bfd7696d8efe9387 Mon Sep 17 00:00:00 2001 From: Nickolai Zeldovich Date: Tue, 28 Oct 2003 20:19:55 -0800 Subject: [PATCH] [NET]: Allow SOMAXCONN to be adjusted via sysctl. --- include/linux/sysctl.h | 3 ++- net/core/sysctl_net_core.c | 9 +++++++++ net/socket.c | 6 ++++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h index d42981d6f954a..4c1b633d5fbfc 100644 --- a/include/linux/sysctl.h +++ b/include/linux/sysctl.h @@ -217,7 +217,8 @@ enum NET_CORE_NO_CONG=14, NET_CORE_LO_CONG=15, NET_CORE_MOD_CONG=16, - NET_CORE_DEV_WEIGHT=17 + NET_CORE_DEV_WEIGHT=17, + NET_CORE_SOMAXCONN=18, }; /* /proc/sys/net/ethernet */ diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c index 734bb00013785..46c0c78b196d6 100644 --- a/net/core/sysctl_net_core.c +++ b/net/core/sysctl_net_core.c @@ -29,6 +29,7 @@ extern __u32 sysctl_rmem_default; extern int sysctl_core_destroy_delay; extern int sysctl_optmem_max; +extern int sysctl_somaxconn; #ifdef CONFIG_NET_DIVERT extern char sysctl_divert_version[]; @@ -174,6 +175,14 @@ ctl_table core_table[] = { }, #endif /* CONFIG_NET_DIVERT */ #endif /* CONFIG_NET */ + { + .ctl_name = NET_CORE_SOMAXCONN, + .procname = "somaxconn", + .data = &sysctl_somaxconn, + .maxlen = sizeof(int), + .mode = 0644, + .proc_handler = &proc_dointvec + }, { .ctl_name = 0 } }; diff --git a/net/socket.c b/net/socket.c index 42cf94ca61c23..bafabac1f891e 100644 --- a/net/socket.c +++ b/net/socket.c @@ -1206,14 +1206,16 @@ asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen) * ready for listening. */ +int sysctl_somaxconn = SOMAXCONN; + asmlinkage long sys_listen(int fd, int backlog) { struct socket *sock; int err; if ((sock = sockfd_lookup(fd, &err)) != NULL) { - if ((unsigned) backlog > SOMAXCONN) - backlog = SOMAXCONN; + if ((unsigned) backlog > sysctl_somaxconn) + backlog = sysctl_somaxconn; err = security_socket_listen(sock, backlog); if (err) { -- 2.53.0