Prevent exceptions when closing sockets.
This commit is contained in:
@@ -130,7 +130,8 @@ ChatCleanerManager::HandleConnect(const boost::system::error_code& ec,
|
||||
if (endpoint_iterator != boost::asio::ip::tcp::resolver::iterator())
|
||||
{
|
||||
// Try next resolve entry.
|
||||
m_socket->close();
|
||||
boost::system::error_code ec;
|
||||
m_socket->close(ec);
|
||||
boost::asio::ip::tcp::endpoint endpoint = *endpoint_iterator;
|
||||
m_socket->async_connect(
|
||||
endpoint,
|
||||
@@ -151,7 +152,8 @@ ChatCleanerManager::HandleWrite(const boost::system::error_code &ec,
|
||||
if (ec && ec != boost::asio::error::operation_aborted)
|
||||
{
|
||||
LOG_ERROR("Error sending message to chat cleaner.");
|
||||
m_socket->close();
|
||||
boost::system::error_code ec;
|
||||
m_socket->close(ec);
|
||||
m_connected = false;
|
||||
}
|
||||
}
|
||||
@@ -199,14 +201,16 @@ ChatCleanerManager::HandleRead(const boost::system::error_code &ec, size_t bytes
|
||||
}
|
||||
else
|
||||
{
|
||||
m_socket->close();
|
||||
boost::system::error_code ec;
|
||||
m_socket->close(ec);
|
||||
m_connected = false;
|
||||
}
|
||||
}
|
||||
else if (ec != boost::asio::error::operation_aborted)
|
||||
{
|
||||
LOG_ERROR("Error receiving data from chat cleaner.");
|
||||
m_socket->close();
|
||||
boost::system::error_code ec;
|
||||
m_socket->close(ec);
|
||||
m_connected = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -617,7 +617,8 @@ ClientStateStartConnect::HandleConnect(const boost::system::error_code& ec, boos
|
||||
{
|
||||
// Try next resolve entry.
|
||||
ClientContext &context = client->GetContext();
|
||||
context.GetSessionData()->GetAsioSocket()->close();
|
||||
boost::system::error_code ec;
|
||||
context.GetSessionData()->GetAsioSocket()->close(ec);
|
||||
boost::asio::ip::tcp::endpoint endpoint = *endpoint_iterator;
|
||||
context.GetSessionData()->GetAsioSocket()->async_connect(
|
||||
endpoint,
|
||||
@@ -640,7 +641,8 @@ ClientStateStartConnect::TimerTimeout(const boost::system::error_code& ec, boost
|
||||
{
|
||||
if (!ec && &client->GetState() == this)
|
||||
{
|
||||
client->GetContext().GetSessionData()->GetAsioSocket()->close();
|
||||
boost::system::error_code ec;
|
||||
client->GetContext().GetSessionData()->GetAsioSocket()->close(ec);
|
||||
throw ClientException(__FILE__, __LINE__, ERR_SOCK_CONNECT_TIMEOUT, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -459,7 +459,7 @@ ClientThread::Main()
|
||||
}
|
||||
// Close the socket.
|
||||
boost::system::error_code ec;
|
||||
GetContext().GetSessionData()->GetAsioSocket()->close();
|
||||
GetContext().GetSessionData()->GetAsioSocket()->close(ec);
|
||||
// Set a state which does not do anything.
|
||||
SetState(CLIENT_FINAL_STATE::Instance());
|
||||
// Cancel timers.
|
||||
|
||||
@@ -277,9 +277,10 @@ SessionManager::Clear()
|
||||
SessionMap::iterator i = m_sessionMap.begin();
|
||||
SessionMap::iterator end = m_sessionMap.end();
|
||||
|
||||
boost::system::error_code ec;
|
||||
while (i != end)
|
||||
{
|
||||
i->second.sessionData->GetAsioSocket()->close();
|
||||
i->second.sessionData->GetAsioSocket()->close(ec);
|
||||
++i;
|
||||
}
|
||||
m_sessionMap.clear();
|
||||
|
||||
Reference in New Issue
Block a user