aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/server_epoll.lua21
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);