From 041d55e5842b7bb5b5210612cb663e9893f0aa0d Mon Sep 17 00:00:00 2001 From: Hiroki Noda Date: Thu, 22 Mar 2018 05:12:37 +0900 Subject: [PATCH] Get the listen backlog size from net.core.somaxconn on linux --- source/eventcore/drivers/posix/sockets.d | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/source/eventcore/drivers/posix/sockets.d b/source/eventcore/drivers/posix/sockets.d index 1dc381f..ec4592e 100644 --- a/source/eventcore/drivers/posix/sockets.d +++ b/source/eventcore/drivers/posix/sockets.d @@ -217,7 +217,7 @@ final class PosixEventDriverSockets(Loop : PosixEventLoop) : EventDriverSockets invalidateSocket(); return; } - if (listen(sockfd, 128) != 0) { + if (listen(sockfd, getBacklogSize()) != 0) { invalidateSocket(); return; } @@ -955,3 +955,19 @@ private int getSocketError() version (Windows) return WSAGetLastError(); else return errno; } +private int getBacklogSize() +@trusted @nogc nothrow { + int backlog = 128; + version(linux) + { + import core.stdc.stdio : fopen, fscanf; + auto somaxconn = fopen("/proc/sys/net/core/somaxconn", "re"); + if(somaxconn) + { + int tmp; + if (fscanf(somaxconn, "%d", &tmp) == 1) + backlog = tmp; + } + } + return backlog; +}