2010-03-27 126 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