実行時にアクセス違反をスローするコードブロックがあります。 boost :: asioのasync_connectハンドラです。それは[0]がNULL values_いる間values_取得しようとしたので、それは問題のように見えるデバッガでboost :: asio :: ip :: tcp :: resolver :: iterator値がnullであることを確認します。
//------------------------------------------------------------------------------
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;
は、HOST_NAME()> endpoint-内部にあります。
これは一般的な接続拒否のシナリオです。ハンドラがエンドポイントを持っているので、誰が接続しようとしているのか分かりました。メソッドを呼び出す前にイテレータで行うことができるチェックの方法はありますか?
合格とまだ
if(endpoint != boost::asio::ip::tcp::resolver::iterator())
{
std::string blah = endpoint->host_name();
}