From 0f47457f1129fa21131465aba5663a14b2a09386 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 23 Aug 2022 10:14:45 -0400 Subject: [PATCH] Remove our artificial PG_SOMAXCONN limit on listen queue length. I added this in commit 153f40067, out of paranoia about kernels possibly rejecting very large listen backlog requests. However, POSIX has said for decades that the kernel must silently reduce any value it considers too large, and there's no evidence that any current system doesn't obey that. Let's just drop this limit and save some complication. While we're here, compute the request as twice MaxConnections not twice MaxBackends; the latter no longer means what it did in 2001. Per discussion of a report from Kevin McKibbin. Discussion: https://postgr.es/m/CADc_NKg2d+oZY9mg4DdQdoUcGzN2kOYXBu-3--RW_hEe0tUV=g@mail.gmail.com --- src/backend/libpq/pqcomm.c | 10 ++++------ src/include/pg_config_manual.h | 11 ----------- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index 8ff3be611de..7112e9751b1 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -537,13 +537,11 @@ StreamServerPort(int family, const char *hostName, unsigned short portNumber, } /* - * Select appropriate accept-queue length limit. PG_SOMAXCONN is only - * intended to provide a clamp on the request on platforms where an - * overly large request provokes a kernel error (are there any?). + * Select appropriate accept-queue length limit. It seems reasonable + * to use a value similar to the maximum number of child processes + * that the postmaster will permit. */ - maxconn = MaxBackends * 2; - if (maxconn > PG_SOMAXCONN) - maxconn = PG_SOMAXCONN; + maxconn = MaxConnections * 2; err = listen(fd, maxconn); if (err < 0) diff --git a/src/include/pg_config_manual.h b/src/include/pg_config_manual.h index 844c3e0f094..f2a106f983d 100644 --- a/src/include/pg_config_manual.h +++ b/src/include/pg_config_manual.h @@ -114,17 +114,6 @@ */ #define MAXPGPATH 1024 -/* - * PG_SOMAXCONN: maximum accept-queue length limit passed to - * listen(2). You'd think we should use SOMAXCONN from - * , but on many systems that symbol is much smaller - * than the kernel's actual limit. In any case, this symbol need be - * twiddled only if you have a kernel that refuses large limit values, - * rather than silently reducing the value to what it can handle - * (which is what most if not all Unixen do). - */ -#define PG_SOMAXCONN 10000 - /* * You can try changing this if you have a machine with bytes of * another size, but no guarantee...