From 5da6f87a495a575c8f688db3903d3e76a5f65e4f Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Fri, 2 Feb 2018 23:46:00 +0100 Subject: server_epoll: Rework how socket readyness is detected --- net/server_epoll.lua | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/net/server_epoll.lua b/net/server_epoll.lua index a88aad12..7aad9ede 100644 --- a/net/server_epoll.lua +++ b/net/server_epoll.lua @@ -505,9 +505,10 @@ function interface:init() if self.tls and not self._tls then return self:starttls(); else - self.onwriteable = interface.onconnect; + self.onwriteable = interface.onfirstwritable; + self.onreadable = interface.onfirstreadable; self:setwritetimeout(); - return self:setflags(false, true); + return self:setflags(true, true); end end @@ -537,15 +538,24 @@ end -- Connected! function interface:onconnect() - self.onwriteable = nil; self:setflags(true, false); - if not self._connected then - self._connected = true; - self:on("connect"); - end + self:on("connect"); +end + +function interface:onfirstwritable() + self.onreadable = nil; + self.onwriteable = nil; + self:onconnect(); return self:onwriteable(); end +function interface:onfirstreadable() + self.onreadable = nil; + self.onwriteable = nil; + self:onconnect(); + return self:onreadable(); +end + local function addserver(addr, port, listeners, pattern, tls) local conn, err = socket.bind(addr, port, cfg.tcp_backlog); if not conn then return conn, err; end -- cgit v1.2.3