【发布时间】:2017-03-21 21:35:32
【问题描述】:
我有一段代码在执行时会引发访问冲突。它是 boost::asio 的 async_connect 处理程序。
//------------------------------------------------------------------------------
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() 内部,因为它试图在 values_ 为空时获取 values_[0]。
这是一个常见的连接被拒绝场景。我认为处理程序获得了端点,以便它知道它试图连接到谁!在尝试调用迭代器的方法之前,是否可以对迭代器进行某种检查?
它似乎通过并仍然抛出访问冲突
if( endpoint != boost::asio::ip::tcp::resolver::iterator() )
{
std::string blah = endpoint->host_name();
}
【问题讨论】:
标签: c++ boost-asio