Changeset

12515:76c1725f4467

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.
author Kim Alvefur <zash@zash.se>
date Sun, 15 May 2022 22:41:17 +0200
parents 12514:194469fb46f9
children 12516:d76ac22f3571
files CHANGES net/server_epoll.lua
diffstat 2 files changed, 7 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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
 ======
--- 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