簡體   English   中英

boost :: asio :: ip :: tcp :: resolver :: iterator檢查值是否為null

[英]boost::asio::ip::tcp::resolver::iterator Check if values are null

我有一段代碼在執行時拋出了訪問沖突。 它是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;

在調試器中,看起來問題出在endpoint-> host_name()內部,因為它嘗試獲取values_ [0]而values_為null。

這是一種常見的連接拒絕方案。 我以為處理程序得到了端點,以便它知道它試圖連接到誰! 在嘗試調用方法之前,我是否可以對迭代器進行某種檢查?

它似乎通過並仍然拋出訪問沖突

if( endpoint != boost::asio::ip::tcp::resolver::iterator() )
{
    std::string blah = endpoint->host_name();
}

可能你現在已經想到了這一點,但我會張貼幾行以防其他人發生。

這個問題與我的問題類似。

這將無法正常工作,並會向你描述給出了類似的結果。

 void establish_connection() {
      tcp::resolver resolver(get_asio_io_service());  // this is a problem      
      tcp::resolver::query q{server_name, "https"};
      resolver.async_resolve(q,
                             [&](asio::error_code ec,
                                 tcp::resolver::iterator it) {
                                this->handle_resolve(ec, it);
                             });
   }

其中establish_connection()是對象中處理與服務器通信的方法。

在setup_connection()退出后,解析器對象消失。 你必須找到一種方法讓它堅持下去。 Web上的各種演示將其作為客戶端對象的屬性。

請分享您對此問題的體驗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM