Prevent exceptions when closing sockets.

This commit is contained in:
lotodore
2009-08-17 10:11:51 +00:00
parent e420cae48c
commit 6eb25757bc
4 changed files with 15 additions and 8 deletions
+8 -4
View File
@@ -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;
}
}
+4 -2
View File
@@ -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);
}
}
+1 -1
View File
@@ -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.
+2 -1
View File
@@ -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();