diff options
Diffstat (limited to 'net/server_epoll.lua')
-rw-r--r-- | net/server_epoll.lua | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/net/server_epoll.lua b/net/server_epoll.lua index b4477375..dd309b05 100644 --- a/net/server_epoll.lua +++ b/net/server_epoll.lua @@ -657,6 +657,7 @@ interface.send = interface.write; -- Close, possibly after writing is done function interface:close() + local status, err; if self.writebuffer and #self.writebuffer ~= 0 then self._connected = false; self:set(false, true); -- Flush final buffer contents @@ -665,6 +666,24 @@ function interface:close() self.write, self.send = noop, noop; -- No more writing self:debug("Close after writing remaining buffered data"); self.ondrain = interface.close; + elseif self.conn.shutdown and self._tls then + status, err = self.conn:shutdown(); + self.onreadable = interface.close; + self.onwritable = interface.close; + if err == nil then + if status == true then + self._tls = false; + end + return self:close(); + elseif err == "wantread" then + self:set(true, nil); + self:setreadtimeout(); + elseif err == "wantwrite" then + self:set(nil, true); + self:setwritetimeout(); + else + self._tls = false; + end else self:debug("Closing now"); self.write, self.send = noop, noop; @@ -675,6 +694,8 @@ function interface:close() end function interface:destroy() + -- make sure tls sockets aren't put in blocking mode + if self.conn.shutdown and self._tls then self.conn:shutdown(); end self:del(); self:setwritetimeout(false); self:setreadtimeout(false); |