Software /
code /
prosody
Changeset
8506:174fd716c9fa
server_epoll: Rework how socket readyness is detected
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 02 Feb 2018 23:46:00 +0100 |
parents | 8505:c9bdb4dfed96 |
children | 8507:71ef6d509105 |
files | net/server_epoll.lua |
diffstat | 1 files changed, 17 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/net/server_epoll.lua Fri Feb 02 19:48:04 2018 +0000 +++ b/net/server_epoll.lua Fri Feb 02 23:46:00 2018 +0100 @@ -505,9 +505,10 @@ 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 @@ -- Connected! function interface:onconnect() + self:setflags(true, false); + self:on("connect"); +end + +function interface:onfirstwritable() + self.onreadable = nil; self.onwriteable = nil; - self:setflags(true, false); - if not self._connected then - self._connected = true; - self:on("connect"); - end + 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