【发布时间】:2010-03-27 11:49:24
【问题描述】:
我的 Ubuntu Karmic 系统遇到了一个奇怪的问题。
当我使用 AI_PASSIVE 和 AF_UNSPEC 调用 getaddrinfo() 以获取空主机和 UDP 12000 端口以获取可绑定地址时,我只返回一个 IPv4 结果(0.0.0.0:12000实例)。
如果我更改调用并指定 AF_INET6 而不是 AF_UNSPEC,则 getaddrinfo() 将返回“名称或服务未知”。
我不应该得到 [::]:12000 结果吗?
如果我将主机设置为 ::1,也会发生同样的事情。
当我为主机“localhost”和 UDP 12000 端口调用不带 AI_PASSIVE(以获取“可连接”地址)的 getaddrinfo() 时,我首先得到 [::1]:12000 然后127.0.0.1:12000.
显然,我的系统已准备好 IPv6(我可以 ping 到 IPv4 和 IPv6 地址,以及 DNS 解析)。但是,我怎么无法使用 getaddrinfo() 绑定到 IPv6 地址?
你们知道可能出了什么问题吗?
我的操作系统是 Ubuntu Karmic,全新安装,无需任何网络调整。
谢谢。
P.S:如果你不知道但仍想帮助我,你可以得到这个sample program 或输入:
然后给我结果:
$ ./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 结果。
【问题讨论】:
标签: networking bind ipv6