diff options
author | An-Zheng <62806056+An-Zheng@users.noreply.github.com> | 2025-08-27 13:09:34 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-08-27 19:09:34 +0200 |
commit | 7c7873b73b9e3c14fc7ad5d8d7f2e90e4f0f4e06 (patch) | |
tree | c3e0154d9317a19bd146abeee04464e32e0263c3 /src/common | |
parent | 480adfce110b39aa84e5b544972ab995c7cf5b41 (diff) |
Core/Network: Refactor duplicate code in Socket (#30970)
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/network/Socket.h | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/src/common/network/Socket.h b/src/common/network/Socket.h index b7542c9c70d..aa42c7299e8 100644 --- a/src/common/network/Socket.h +++ b/src/common/network/Socket.h @@ -279,6 +279,13 @@ private: return IsOpen(); } + void QueuedBufferWriteDone() + { + _writeQueue.pop(); + if (_openState == OpenState_Closing && _writeQueue.empty()) + CloseSocket(); + } + #ifdef TC_SOCKET_USE_IOCP void WriteHandler(boost::system::error_code const& error, std::size_t transferedBytes) @@ -288,12 +295,10 @@ private: _isWritingAsync = false; _writeQueue.front().ReadCompleted(transferedBytes); if (!_writeQueue.front().GetActiveSize()) - _writeQueue.pop(); + QueuedBufferWriteDone(); if (!_writeQueue.empty()) AsyncProcessQueue(); - else if (_openState == OpenState_Closing) - CloseSocket(); } else CloseSocket(); @@ -324,16 +329,12 @@ private: if (error == boost::asio::error::would_block || error == boost::asio::error::try_again) return AsyncProcessQueue(); - _writeQueue.pop(); - if (_openState == OpenState_Closing && _writeQueue.empty()) - CloseSocket(); + QueuedBufferWriteDone(); return false; } else if (bytesSent == 0) { - _writeQueue.pop(); - if (_openState == OpenState_Closing && _writeQueue.empty()) - CloseSocket(); + QueuedBufferWriteDone(); return false; } else if (bytesSent < bytesToSend) // now n > 0 @@ -342,9 +343,7 @@ private: return AsyncProcessQueue(); } - _writeQueue.pop(); - if (_openState == OpenState_Closing && _writeQueue.empty()) - CloseSocket(); + QueuedBufferWriteDone(); return !_writeQueue.empty(); } |