У меня странная проблема в моей системе 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, новая установка без каких-либо настроек сети.
Спасибо.
P.S .: Если вы понятия не имеете, но все же хотите помочь мне, вы можете получить образец программы или введите:
wget http://people.apache.org/~jorton/gai.c
И дайте мне результат:
$ ./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.