【问题标题】:Host not found (authoritative)找不到主机(权威)
【发布时间】:2013-11-07 17:07:48
【问题描述】:

最近我写了一些应用程序,它创建了许多线程并作为客户端连接到不同的服务器,我使用了套接字,然后我意识到我可以使用 boost 库来做到这一点,所以我重写了应用程序来提升部分连接工作良好并且部分给出这个错误:

找不到主机(权威)

我不知道为什么会这样,当我使用 getaddrbyhost 时它工作得很好,但是 boost resolver 给出了这个错误...... 有什么问题,每个地址都是域。

这是部分代码:

class client
{
public:
    client(boost::asio::io_service& io_service,
           const char* server, const char* port, const int i)
        : resolver_(io_service),
          socket_(io_service),
          i_(i)
    {

        tcp::resolver::query query(tcp::v4(), boost::lexical_cast< std::string >( server ),  boost::lexical_cast< std::string >( port ), boost::asio::ip::resolver_query_base::numeric_service);
        resolver_.async_resolve(query,
                                boost::bind(&client::handle_resolve, this,
                                            boost::asio::placeholders::error,
                                            boost::asio::placeholders::iterator));
    }

private:
    void handle_resolve(const boost::system::error_code& err,
                        tcp::resolver::iterator endpoint_iterator)
    {
        if (!err)
        {
            boost::asio::async_connect(socket_, endpoint_iterator,
                                       boost::bind(&client::handle_connect, this,
                                                   boost::asio::placeholders::error));
        }
        else
        {
            //here outputs error 
            std::cout << __FUNCTION__ << " Error: " << err.message() << "\n";
        }
    }

编辑 昨天很奇怪,我遇到了问题,今天它工作了......嗯,也许 dhcp 很忙或其他什么

【问题讨论】:

    标签: c++ boost boost-asio


    【解决方案1】:

    最有可能的是,该域无法由 DNS 解析,但可以通过主机平台使用的其他方法解析,例如 /etc/hosts 样式表、WINS 或一些类似的名称解析方案。

    【讨论】:

    • 那我该怎么办,我用linux测试,每个域都是全局域而不是本地域,getaddrbyhost可以解析,boost解析器不行...
    • 仅适用于某些人......但同一个域适用于非 boost 代码,这对我来说很奇怪
    • 失败的有什么规律吗?你能在这里分享一些吗?
    • 嗯,两段代码做不同的事情。一种使用主机的默认名称解析方案,另一种使用 DNS。最有可能的是那些通过主机的默认名称解析方案而不是 DNS 解析的方案。
    • boost 使用 dns?它的发生没有任何模式,也许我一次创建了太多客户,可能是这样吗?
    【解决方案2】:

    嗯,答案是我试图连接的主机在我的 LAN 网络之外,在另一个 LAN 网络中注册为棘手的域。我不知道,因为我正在测试存储在公司数据库中的大约 20.000 台主机。我以为一切都只在一个 LAN 网络上运行,但不是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-20
      • 2018-04-29
      • 2020-09-11
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 2011-01-25
      相关资源
      最近更新 更多