diff options
author | Kim Alvefur <zash@zash.se> | 2022-05-15 22:41:17 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2022-05-15 22:41:17 +0200 |
commit | d33b858436ddfce5a3364ee35debb7988e6dda0c (patch) | |
tree | 4fbd239b389e13c60456e724657c50cfeb9b9e87 | |
parent | 3b6565c77ba7bb4107bc00d1004bf8db6eaa1fe4 (diff) | |
download | prosody-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.
-rw-r--r-- | CHANGES | 1 | ||||
-rw-r--r-- | net/server_epoll.lua | 6 |
2 files changed, 7 insertions, 0 deletions
@@ -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 |