# HG changeset patch # User Kim Alvefur # Date 1626526488 -7200 # Node ID c206430e264301eeb917affc03aea665f2d88114 # Parent a3572205c5bfa9ab13bf4d63f271ceb94c604997 net.server_epoll: Ensure timeouts match epoll flags Read and write timeouts should usually match whether we want to read or write. diff -r a3572205c5bf -r c206430e2643 net/server_epoll.lua --- a/net/server_epoll.lua Sat Jul 17 14:51:50 2021 +0200 +++ b/net/server_epoll.lua Sat Jul 17 14:54:48 2021 +0200 @@ -430,6 +430,7 @@ err = "timeout"; elseif err == "wantwrite" then self:set(nil, true); + self:setwritetimeout(); err = "timeout"; elseif err == "timeout" and not self._connected then err = "connection timeout"; @@ -510,8 +511,10 @@ end if err == "wantwrite" or err == "timeout" then self:set(nil, true); + self:setwritetimeout(); elseif err == "wantread" then self:set(true, nil); + self:setreadtimeout(); elseif err ~= "timeout" then self:on("disconnect", err); self:destroy(); @@ -553,6 +556,7 @@ function interface:close() if self.writebuffer and (self.writebuffer[1] or type(self.writebuffer) == "string") then self:set(false, true); -- Flush final buffer contents + self:setreadtimeout(false); self:setwritetimeout(); self.write, self.send = noop, noop; -- No more writing self:debug("Close after writing remaining buffered data"); @@ -772,11 +776,13 @@ function interface:pause() self:noise("Pause reading"); + self:setreadtimeout(false); return self:set(false); end function interface:resume() self:noise("Resume reading"); + self:setreadtimeout(); return self:set(true); end