diff options
-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 |