diff options
author | Kim Alvefur <zash@zash.se> | 2018-02-02 23:46:00 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2018-02-02 23:46:00 +0100 |
commit | 5da6f87a495a575c8f688db3903d3e76a5f65e4f (patch) | |
tree | f97b0a0a6b6b4f6a4f6db7263750887ee1ff4af2 /net/server_epoll.lua | |
parent | 27db2bc4316590c79bcecdb6bb0072b86e6137c9 (diff) | |
download | prosody-5da6f87a495a575c8f688db3903d3e76a5f65e4f.tar.gz prosody-5da6f87a495a575c8f688db3903d3e76a5f65e4f.zip |
server_epoll: Rework how socket readyness is detected
Diffstat (limited to 'net/server_epoll.lua')
-rw-r--r-- | net/server_epoll.lua | 24 |
1 files 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 |