aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorleak <leak@bitmx.net>2014-07-27 17:33:56 +0200
committerleak <leak@bitmx.net>2014-07-27 18:36:03 +0200
commite502e01f5d16964e67685c956e204ae41b756d26 (patch)
tree6be63e3257b5b83083656fb793681cc2c454e128 /src/server
parenteabf0f44dd4d3514dd302cd7608fbcaa8e3fa776 (diff)
Fixed a rare crash case when authserver socket was forcefully closed during read
Closes #12634
Diffstat (limited to 'src/server')
-rw-r--r--src/server/shared/Networking/Socket.h19
1 files changed, 14 insertions, 5 deletions
diff --git a/src/server/shared/Networking/Socket.h b/src/server/shared/Networking/Socket.h
index 96f597257be..9c3ec180b0a 100644
--- a/src/server/shared/Networking/Socket.h
+++ b/src/server/shared/Networking/Socket.h
@@ -56,7 +56,16 @@ public:
void ReadData(std::size_t size, std::size_t bufferOffset)
{
- _socket.read_some(boost::asio::buffer(&_readBuffer[bufferOffset], size));
+ boost::system::error_code error;
+
+ _socket.read_some(boost::asio::buffer(&_readBuffer[bufferOffset], size), error);
+
+ if (error)
+ {
+ TC_LOG_DEBUG("network", "Socket::ReadData: %s errored with: %i (%s)", GetRemoteIpAddress().to_string().c_str(), error.value(), error.message().c_str());
+
+ CloseSocket();
+ }
}
void AsyncWrite(PacketType const& data)
@@ -68,11 +77,11 @@ public:
bool IsOpen() const { return _socket.is_open(); }
void CloseSocket()
{
- boost::system::error_code socketError;
- _socket.close(socketError);
- if (socketError)
+ boost::system::error_code error;
+ _socket.close(error);
+ if (error)
TC_LOG_DEBUG("network", "Socket::CloseSocket: %s errored when closing socket: %i (%s)", GetRemoteIpAddress().to_string().c_str(),
- socketError.value(), socketError.message().c_str());
+ error.value(), error.message().c_str());
}
uint8* GetReadBuffer() { return _readBuffer; }