aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/common/network/Socket.h23
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();
}