Ich habe einen Code-Block, der beim Ausführen eine Zugriffsverletzung auslöst. Es ist der async_connect-Handler für boost :: asio.boost :: asio :: ip :: tcp :: resolver :: iterator Überprüfen Sie, ob die Werte null sind
//------------------------------------------------------------------------------
void MyClient::OnConnect(const boost::system::error_code & errorCode, boost::asio::ip::tcp::resolver::iterator endpoint)
{
if (errorCode || endpoint == boost::asio::ip::tcp::resolver::iterator())
{
// Error - An error occured while attempting to connect
// Most likely these error codes correspond to https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx
std::ostringstream msg;
msg << "An error occured while attempting to connect to " << endpoint->host_name()
<< ". Error code: " << errorCode
<< ". Error Message: " << ErrorCodeToString(errorCode);
LogError(msg.str().c_str(), __FUNCSIG__, __FILE__, __LINE__);
return;
}
// We connected to an endpoint
m_connectionState |= CONNECTED;
Im Debugger es wie das Problem aussieht, ist innen endpoint-> host_name(), weil es versucht, erhalten values_ [0] während values_ null sind.
Dies ist ein häufig verwendetes Connection Refused-Szenario. Ich dachte, dass der Handler den Endpunkt erhalten hat, so dass er wusste, mit wem er sich verbinden wollte! Gibt es eine Art der Überprüfung, die ich auf dem Iterator durchführen kann, bevor ich versuche, eine Methode aufzurufen?
Es scheint und noch Zugriffsverletzung werfen auf
if(endpoint != boost::asio::ip::tcp::resolver::iterator())
{
std::string blah = endpoint->host_name();
}