2010-03-27 127 views
2

我在我的Ubuntu Karmic系統上遇到了一個奇怪的問題。無法綁定到IPv6地址

當我打電話的getaddrinfo()與AI_PASSIVE和AF_UNSPEC,一個空的主機和UDP端口12000獲得一個綁定的地址,我只拿回一個IPv4的結果(0.0.0.0:12000例如)。

如果我更改了我的調用並指定了AF_INET6而不是AF_UNSPEC,則getaddrinfo()將返回「名稱或服務未知」。

我不應該得到[::]:12000作爲結果?

如果將主機設置爲:: 1,則會發生同樣的情況。

當我打電話的getaddrinfo()不AI_PASSIVE(得到一個 「連接」 的地址)主機 「本地主機」 和UDP端口12000,我第一次得到[:: 1]:12000然後127.0.0.1 :12000

很顯然,我的系統已準備好IPv6了(我可以同時ping到IPv4和IPv6地址以及DNS解析)。但是,我怎麼能得到一個IPv6地址與getaddrinfo()綁定?

你們有什麼想法可能是錯的?

我的操作系統是Ubuntu Karmic,全新安裝,沒有任何網絡調整。

謝謝。

PS:如果你不知道,但還是想幫我,你可以得到這個sample program或類型:

wget的http://people.apache.org/~jorton/gai.c

並給我的結果:

$ ./gai -ap空12000

我的結果是:

$ ./gai -ap空12000

的getaddrinfo(NULL, 「12000」,{。家庭= AF_UNSPEC,.hints = 0 | AI_ADDRCONFIG | AI_PASSIVE})= 0 :

家庭= 2,原= 6 inet4:地址= 0.0.0.0,端口= 12000

在那裏,你可以看到,我只有一個IPv4的結果。

回答

2

這發生在使用eglibc的新系統上:debian-glibc

顯然,有一個錯誤,要求您至少爲您的網絡接口設置一個有效的IPv6地址(環回不計算在內)。

我這樣做後:

$ sudo的IP地址-6添加2001:660:4701:1001 :: 1 dev的eth0的

我:

$ ./gai -ap null 12000

getaddrinfo(NULL,「12000」,{.family = AF_UNSPEC,.hints = 0 | AI_ADDRCONFIG | AI_PASSIVE})= 0:

家族= 2,原= 6 inet4:ADDR = 0.0.0.0,端口= 12000

家族= 10,原= 6 INET6:ADDR = ::,端口= 12000,flowinfo = 0

我希望這可以幫助某人。

+1

它肯定幫了我 - 謝謝。 – 2011-03-04 13:15:04