Core/Network: Fix some possible exceptions on socket.close()

Ref #12634
This commit is contained in:
DDuarte
2014-07-25 18:01:27 +01:00
parent cbcebbe63d
commit 4f1d247dfb
4 changed files with 30 additions and 13 deletions
+15 -7
View File
@@ -78,8 +78,7 @@ void WorldSocket::AsyncReadHeader()
else
{
// _socket.is_open() till returns true even after calling close()
boost::system::error_code socketError;
_socket.close(socketError);
CloseSocket();
}
});
}
@@ -155,8 +154,7 @@ void WorldSocket::AsyncReadData(size_t dataSize)
else
{
// _socket.is_open() till returns true even after calling close()
boost::system::error_code socketError;
_socket.close(socketError);
CloseSocket();
}
});
}
@@ -202,7 +200,7 @@ void WorldSocket::AsyncWrite(std::vector<uint8> const& data)
AsyncWrite(_writeQueue.front());
}
else
_socket.close();
CloseSocket();
});
}
@@ -475,7 +473,7 @@ void WorldSocket::HandlePing(WorldPacket& recvPacket)
TC_LOG_ERROR("network", "WorldSocket::HandlePing: %s kicked for over-speed pings (address: %s)",
_worldSession->GetPlayerInfo().c_str(), GetRemoteIpAddress().c_str());
_socket.close();
CloseSocket();
return;
}
}
@@ -494,7 +492,7 @@ void WorldSocket::HandlePing(WorldPacket& recvPacket)
TC_LOG_ERROR("network", "WorldSocket::HandlePing: peer sent CMSG_PING, but is not authenticated or got recently kicked, address = %s",
GetRemoteIpAddress().c_str());
_socket.close();
CloseSocket();
return;
}
@@ -502,3 +500,13 @@ void WorldSocket::HandlePing(WorldPacket& recvPacket)
packet << ping;
return AsyncWrite(packet);
}
void WorldSocket::CloseSocket()
{
boost::system::error_code socketError;
_socket.close(socketError);
if (socketError)
TC_LOG_DEBUG("network", "WorldSocket::CloseSocket: Player '%s' (%s) errored when closing socket: %i (%s)",
_worldSession ? _worldSession->GetPlayerInfo().c_str() : "unknown", GetRemoteIpAddress().c_str(),
socketError.value(), socketError.message());
}