【问题标题】:Boost asio: Using IPv6 addresses in resolver::query works on Win32, but not on LinuxBoost asio:在 resolver::query 中使用 IPv6 地址适用于 Win32,但不适用于 Linux
【发布时间】:2010-11-30 20:17:31
【问题描述】:

我目前正在开发一个简单的服务器应用程序,它也应该支持 IPv6。 IPv6 在 Windows 上运行良好(使用 MSVC2010),但在 Linux 上却不行。

想象下面的代码:

boost::system::error_code ec;
std::string address="::1", service="http";
tcp::resolver resolver(io_service);
tcp::resolver::query query(address, service);
tcp::resolver::iterator resiter = resolver.resolve(query, ec);

if (ec)
    std::cout << "Cannot resolve address: " << address << "(" << ec.message() << ")" << std::endl;

在 Linux 上打印的错误消息是“找不到主机(权威)”,而它在 Windows 上工作。

欢迎任何提示。

【问题讨论】:

  • /etc/hosts 在你的 Linux 系统上是什么样子的。

标签: c++ networking boost-asio resolver


【解决方案1】:

Linux 和 Windows 在名称服务返回的地址搜索顺序方面有不同的行为。尝试使用不同的标志来更精细地控制您要查询的地址类型。例如,对于这个查询,您可以使用 numeric_host 标志。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 2011-10-03
    • 2016-09-07
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    相关资源
    最近更新 更多