# HG changeset patch # User Kim Alvefur # Date 1632310187 -7200 # Node ID f27b9319e0da1f6460b5f410ed23472fd31f7a4f # Parent 790bffbb9047924996fdfefa3cbf5b73fd128885 net.server_epoll: Separate handling of "closed" from other errors The intent is to ensure 'ondisconnect' only gets called once, while giving buffered outgoing data a last chance to be delivered via the :close() path in case the connection was only shutdown in one direction. diff -r 790bffbb9047 -r f27b9319e0da net/server_epoll.lua --- a/net/server_epoll.lua Wed Sep 22 11:27:55 2021 +0200 +++ b/net/server_epoll.lua Wed Sep 22 13:29:47 2021 +0200 @@ -456,14 +456,14 @@ self:onconnect(); self:onincoming(partial, err); end - if err ~= "timeout" then - if err == "closed" then - self:debug("Connection closed by remote"); - else - self:debug("Read error, closing (%s)", err); - end + if err == "closed" and self._connected then + self:debug("Connection closed by remote"); + self:close(err); + return; + elseif err ~= "timeout" then + self:debug("Read error, closing (%s)", err); self:on("disconnect", err); - self:close(); + self:destroy(); return; end end