Boost asio: использование адресов IPv6 в resolver :: query работает на Win32, но не на Linux - PullRequest
0 голосов
/ 30 ноября 2010

В настоящее время я занимаюсь разработкой простого серверного приложения, которое также должно поддерживать 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.

Любые советы приветствуются.

1 Ответ

0 голосов
/ 30 ноября 2010

Linux и Windows ведут себя по-разному в отношении порядка поиска адресов, возвращаемых службами имен. Попробуйте использовать различные флаги, чтобы получить более детальный контроль над типом адреса, который вы запрашиваете. Например, для этого запроса вы можете использовать флаг numeric_host.

...