From 094b20aae7352fade66def63d21a0d72611304a3 Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Thu, 11 Mar 2021 11:23:52 +0800 Subject: [PATCH] fix half close issue, #1358 --- lualib/snax/gateserver.lua | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/lualib/snax/gateserver.lua b/lualib/snax/gateserver.lua index 74a19669..5bcea104 100644 --- a/lualib/snax/gateserver.lua +++ b/lualib/snax/gateserver.lua @@ -12,6 +12,9 @@ local CMD = setmetatable({}, { __gc = function() netpack.clear(queue) end }) local nodelay = false local connection = {} +-- true : connected +-- nil : closed +-- false : close read function gateserver.openclient(fd) if connection[fd] then @@ -21,8 +24,8 @@ end function gateserver.closeclient(fd) local c = connection[fd] - if c then - connection[fd] = false + if c ~= nil then + connection[fd] = nil socketdriver.close(fd) end end @@ -80,7 +83,7 @@ function gateserver.start(handler) function MSG.open(fd, msg) if client_number >= maxclient then - socketdriver.close(fd) + socketdriver.shutdown(fd) return end if nodelay then @@ -91,20 +94,17 @@ function gateserver.start(handler) handler.connect(fd, msg) end - local function close_fd(fd) - local c = connection[fd] - if c ~= nil then - connection[fd] = nil - client_number = client_number - 1 - end - end - function MSG.close(fd) if fd ~= socket then + client_number = client_number - 1 + if connection[fd] then + connection[fd] = false -- close read + end if handler.disconnect then handler.disconnect(fd) + else + socketdriver.close(fd) end - close_fd(fd) else socket = nil end @@ -114,10 +114,10 @@ function gateserver.start(handler) if fd == socket then skynet.error("gateserver accpet error:",msg) else + socketdriver.shutdown(fd) if handler.error then handler.error(fd, msg) end - close_fd(fd) end end