diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-03-12 19:43:07 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-03-12 19:43:07 +0100 |
commit | 0daba931ef8e57777ed98a94a0a51c0690ba3d9c (patch) | |
tree | be233432c5539eea4512e68230914d8275c60bac | |
parent | 16953c9025525ba88967094a9ad883aca7f8f317 (diff) |
Core/Networking: Fixed DelayedCloseSocket when compiled without TC_SOCKET_USE_IOCP (linux)
Closes #16769
-rw-r--r-- | src/server/shared/Networking/Socket.h | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/server/shared/Networking/Socket.h b/src/server/shared/Networking/Socket.h index 80655441ec2..0674ede57d8 100644 --- a/src/server/shared/Networking/Socket.h +++ b/src/server/shared/Networking/Socket.h @@ -55,11 +55,11 @@ public: virtual bool Update() { - if (!IsOpen()) + if (_closed) return false; #ifndef TC_SOCKET_USE_IOCP - if (_isWritingAsync || _writeQueue.empty()) + if (_isWritingAsync || (_writeQueue.empty() && !_closing)) return true; for (; HandleQueue();) @@ -164,7 +164,6 @@ protected: GetRemoteIpAddress().to_string().c_str(), err.value(), err.message().c_str()); } - private: void ReadHandlerInternal(boost::system::error_code error, size_t transferredBytes) { @@ -208,9 +207,6 @@ private: bool HandleQueue() { - if (!IsOpen()) - return false; - if (_writeQueue.empty()) return false; @@ -227,11 +223,15 @@ private: return AsyncProcessQueue(); _writeQueue.pop(); + if (_closing && _writeQueue.empty()) + CloseSocket(); return false; } else if (bytesSent == 0) { _writeQueue.pop(); + if (_closing && _writeQueue.empty()) + CloseSocket(); return false; } else if (bytesSent < bytesToSend) // now n > 0 @@ -241,6 +241,8 @@ private: } _writeQueue.pop(); + if (_closing && _writeQueue.empty()) + CloseSocket(); return !_writeQueue.empty(); } |