aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2021-07-08 17:52:59 +0200
committerKim Alvefur <zash@zash.se>2021-07-08 17:52:59 +0200
commit852e44959d04b56cbf3c761b1ab5e0547ae05cc7 (patch)
treeb73eac8c0c1e42ce2ade269919d5d9c5537df92f
parent532fbe06878da9f0b10816be662f6aa7463b8f84 (diff)
downloadprosody-852e44959d04b56cbf3c761b1ab5e0547ae05cc7.tar.gz
prosody-852e44959d04b56cbf3c761b1ab5e0547ae05cc7.zip
net.server_epoll: Separate handling of new incoming and outgoing connections
The :init method is more suited for new outgoing connections, which is why it uses the connect_timeout setting. Depending on whether a newly accepted connection is to a Direct TLS port or not, it should be handled differently, and was already. The :starttls method sets up timeouts on its own, so the one set in :init was not needed. Newly accepted plain TCP connections don't need a write timeout set, a read timeout is enough.
-rw-r--r--net/server_epoll.lua8
1 files changed, 6 insertions, 2 deletions
diff --git a/net/server_epoll.lua b/net/server_epoll.lua
index 6618c204..d4a08d3d 100644
--- a/net/server_epoll.lua
+++ b/net/server_epoll.lua
@@ -562,6 +562,8 @@ function interface:starttls(tls_ctx)
self.onwritable = interface.tlshandshake;
self.onreadable = interface.tlshandshake;
self:set(true, true);
+ self:setreadtimeout(cfg.ssl_handshake_timeout);
+ self:setwritetimeout(cfg.ssl_handshake_timeout);
self:debug("Prepared to start TLS");
end
end
@@ -691,15 +693,17 @@ function interface:onacceptable()
end
local client = wrapsocket(conn, self, nil, self.listeners);
client:debug("New connection %s on server %s", client, self);
- client:init();
if self.tls_direct then
+ client:add(true, true);
client:starttls(self.tls_ctx);
else
+ client:add(true, false);
+ client:setreadtimeout();
client:onconnect();
end
end
--- Initialization
+-- Initialization for outgoing connections
function interface:init()
self:setwritetimeout(cfg.connect_timeout);
return self:add(true, true);