# HG changeset patch # User Kim Alvefur # Date 1652647277 -7200 # Node ID 76c1725f4467852b95841f78ebd02b7fc159d448 # Parent 194469fb46f906700d9d574348173ac587eaf3e7 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. diff -r 194469fb46f9 -r 76c1725f4467 CHANGES --- a/CHANGES Fri Jul 16 00:57:42 2021 +0200 +++ b/CHANGES Sun May 15 22:41:17 2022 +0200 @@ -12,6 +12,7 @@ - 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 -r 194469fb46f9 -r 76c1725f4467 net/server_epoll.lua --- a/net/server_epoll.lua Fri Jul 16 00:57:42 2021 +0200 +++ b/net/server_epoll.lua Sun May 15 22:41:17 2022 +0200 @@ -95,6 +95,9 @@ -- 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 @@ 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