diff options
Diffstat (limited to 'src')
-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(); } |