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. --- CHANGES | 1 + net/server_epoll.lua | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/CHANGES b/CHANGES index f47dc1a9..e34ea88e 100644 --- a/CHANGES +++ b/CHANGES @@ -12,6 +12,7 @@ TRUNK - Honour 'weight' parameter during SRV record selection - Support for RFC 8305 "Happy Eyeballs" to improve IPv4/IPv6 connectivity - Support for TCP Fast Open in server_epoll (pending LuaSocket support) +- Support for deferred accept in server_epoll (pending LuaSocket support) 0.12.0 ====== 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