Я столкнулся со странной проблемой в моей системе Ubuntu Karmic.
Когда я вызываю getaddrinfo () с AI_PASSIVE и AF_UNSPEC для пустого хоста и порта UDP 12000 для получения связываемого адреса, я получаю только один результат IPv4 (например, 0.0.0.0:12000).
Если я изменю свой вызов и укажу AF_INET6 вместо AF_UNSPEC, тогда getaddrinfo () вернет Имя или услугу неизвестно.
Разве в результате я не должен получить [::]: 12000?
То же самое произойдет, если я установлю хост на :: 1.
Когда я вызываю getaddrinfo () без AI_PASSIVE (чтобы получить адрес с возможностью подключения) для хоста localhost и порта UDP 12000, я сначала получаю [:: 1]: 12000, а затем 127.0.0.1: 12000.
Итак, очевидно, моя система готова к IPv6 (я могу пинговать как адреса IPv4, так и IPv6, а также разрешение DNS). Но почему я не могу получить IPv6-адрес для привязки с помощью getaddrinfo ()?
Вы, ребята, хоть представляете, что может быть не так?
Моя ОС - Ubuntu Karmic, свежая установка без каких-либо настроек сети.
Спасибо.
PS: Если вы понятия не имеете, но все же хотите мне помочь, вы можете получить эту образец программы или введите:
И дайте мне результат:
$ ./gai -ap null 12000
Мой результат:
$ ./gai -ap null 12000
getaddrinfo (NULL, 12000, {.family = AF_UNSPEC, .hints = 0 | AI_ADDRCONFIG | AI_PASSIVE}) = 0:
family = 2, proto = 6 inet4: addr = 0.0.0.0, port = 12000
Здесь вы можете видеть, что у меня есть только один результат IPv4.