Changeset

12512:b7f07585ec4c

net.server_epoll: Add support for TCP Fast Open Requires a patch to LuaSocket adding this socket option, https://github.com/lunarmodules/luasocket/pull/378 sysctl tweaks net.ipv4.tcp_fastopen=3 net.ipv4.tcp_fastopen_blackhole_timeout_sec = 0 net.ipv4.tcp_fastopen_key=$(</proc/sys/kernel/random/uuid) Disabled by default since it an advanced performance tweak unlikely to be needed by most servers.
author Kim Alvefur <zash@zash.se>
date Thu, 08 Jul 2021 12:29:50 +0200
parents 12511:a24d2b3c19a3
children 12513:6efbcd52db21
files CHANGES net/server_epoll.lua
diffstat 2 files changed, 10 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES	Mon May 16 14:51:58 2022 +0200
+++ b/CHANGES	Thu Jul 08 12:29:50 2021 +0200
@@ -11,6 +11,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)
 
 0.12.0
 ======
--- a/net/server_epoll.lua	Mon May 16 14:51:58 2022 +0200
+++ b/net/server_epoll.lua	Thu Jul 08 12:29:50 2021 +0200
@@ -92,6 +92,9 @@
 
 	--- How long to wait after getting the shutdown signal before forcefully tearing down every socket
 	shutdown_deadline = 5;
+
+	-- TCP Fast Open
+	tcp_fastopen = false;
 }};
 local cfg = default_config.__index;
 
@@ -906,6 +909,9 @@
 		log = logger.init(("serv%s"):format(new_id()));
 	}, interface_mt);
 	server:debug("Server %s created", server);
+	if cfg.tcp_fastopen then
+		server:setoption("tcp-fastopen", cfg.tcp_fastopen);
+	end
 	server:add(true, false);
 	return server;
 end
@@ -962,6 +968,9 @@
 	if not conn then return conn, err; end
 	local ok, err = conn:settimeout(0);
 	if not ok then return ok, err; end
+	if cfg.tcp_fastopen then
+		pcall(conn.setoption, conn, "tcp-fastopen-connect", 1);
+	end
 	local ok, err = conn:setpeername(addr, port);
 	if not ok and err ~= "timeout" then return ok, err; end
 	local client = wrapsocket(conn, nil, read_size, listeners, tls_ctx, extra)