diff options
author | leak <leak@bitmx.net> | 2014-07-27 17:33:56 +0200 |
---|---|---|
committer | leak <leak@bitmx.net> | 2014-07-27 18:36:03 +0200 |
commit | e502e01f5d16964e67685c956e204ae41b756d26 (patch) | |
tree | 6be63e3257b5b83083656fb793681cc2c454e128 /src/server | |
parent | eabf0f44dd4d3514dd302cd7608fbcaa8e3fa776 (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.h | 19 |
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; } |