From d33b858436ddfce5a3364ee35debb7988e6dda0c Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sun, 15 May 2022 22:41:17 +0200 Subject: 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 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. --- net/server_epoll.lua | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'net') 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 -- cgit v1.2.3