From 041d55e5842b7bb5b5210612cb663e9893f0aa0d Mon Sep 17 00:00:00 2001 From: Hiroki Noda Date: Thu, 22 Mar 2018 05:12:37 +0900 Subject: [PATCH 1/3] 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; +} From d3708c5e66674a536b0bfc2d83d452d0db589bde Mon Sep 17 00:00:00 2001 From: Hiroki Noda Date: Thu, 22 Mar 2018 05:14:10 +0900 Subject: [PATCH 2/3] Fix: leak fd --- source/eventcore/drivers/posix/sockets.d | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/eventcore/drivers/posix/sockets.d b/source/eventcore/drivers/posix/sockets.d index ec4592e..dd9e00a 100644 --- a/source/eventcore/drivers/posix/sockets.d +++ b/source/eventcore/drivers/posix/sockets.d @@ -960,13 +960,14 @@ private int getBacklogSize() int backlog = 128; version(linux) { - import core.stdc.stdio : fopen, fscanf; + import core.stdc.stdio : fclose, fopen, fscanf; auto somaxconn = fopen("/proc/sys/net/core/somaxconn", "re"); if(somaxconn) { int tmp; if (fscanf(somaxconn, "%d", &tmp) == 1) backlog = tmp; + fclose(somaxconn); } } return backlog; From e68f1425a9cf54a08702129cbe7c4d246160bd23 Mon Sep 17 00:00:00 2001 From: Hiroki Noda Date: Thu, 22 Mar 2018 05:16:36 +0900 Subject: [PATCH 3/3] format --- source/eventcore/drivers/posix/sockets.d | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/eventcore/drivers/posix/sockets.d b/source/eventcore/drivers/posix/sockets.d index dd9e00a..12247a4 100644 --- a/source/eventcore/drivers/posix/sockets.d +++ b/source/eventcore/drivers/posix/sockets.d @@ -955,14 +955,15 @@ private int getSocketError() version (Windows) return WSAGetLastError(); else return errno; } + private int getBacklogSize() @trusted @nogc nothrow { int backlog = 128; - version(linux) + version (linux) { import core.stdc.stdio : fclose, fopen, fscanf; auto somaxconn = fopen("/proc/sys/net/core/somaxconn", "re"); - if(somaxconn) + if (somaxconn) { int tmp; if (fscanf(somaxconn, "%d", &tmp) == 1)