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