aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2022-05-15 22:41:17 +0200
committerKim Alvefur <zash@zash.se>2022-05-15 22:41:17 +0200
commitd33b858436ddfce5a3364ee35debb7988e6dda0c (patch)
tree4fbd239b389e13c60456e724657c50cfeb9b9e87 /net
parent3b6565c77ba7bb4107bc00d1004bf8db6eaa1fe4 (diff)
downloadprosody-d33b858436ddfce5a3364ee35debb7988e6dda0c.tar.gz
prosody-d33b858436ddfce5a3364ee35debb7988e6dda0c.zip
net.server_epoll: Add option to defer accept() until data available
This is a Linux(?) socket option that delays the accept signal until there is data available to read. E.g. with HTTP this might mean that a whole request can be handled without going back trough another turn of the main loop, and an initial client <stream> can be responded to. This may have effects on latency and resource use, as the server does not need to allocate resources until really needed.
Diffstat (limited to 'net')
-rw-r--r--net/server_epoll.lua6
1 files changed, 6 insertions, 0 deletions
diff --git a/net/server_epoll.lua b/net/server_epoll.lua
index 0d04f6ee..d0ca3125 100644
--- a/net/server_epoll.lua
+++ b/net/server_epoll.lua
@@ -95,6 +95,9 @@ local default_config = { __index = {
-- TCP Fast Open
tcp_fastopen = false;
+
+ -- Defer accept until incoming data is available
+ tcp_defer_accept = false;
}};
local cfg = default_config.__index;
@@ -912,6 +915,9 @@ local function wrapserver(conn, addr, port, listeners, config)
if cfg.tcp_fastopen then
server:setoption("tcp-fastopen", cfg.tcp_fastopen);
end
+ if type(cfg.tcp_defer_accept) == "number" then
+ server:setoption("tcp-defer-accept", cfg.tcp_defer_accept);
+ end
server:add(true, false);
return server;
end