From e502e01f5d16964e67685c956e204ae41b756d26 Mon Sep 17 00:00:00 2001 From: leak Date: Sun, 27 Jul 2014 17:33:56 +0200 Subject: Fixed a rare crash case when authserver socket was forcefully closed during read Closes #12634 --- src/server/shared/Networking/Socket.h | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'src') 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; } -- cgit v1.2.3