我的 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,全新安装,无需任何网络调整。
谢谢你。
PS:如果您不知道但仍想帮助我,可以获取此示例程序或键入:
并给我以下结果:
$ ./gai -ap null 12000
我的结果是:
$ ./gai -ap null 12000
getaddrinfo(NULL, "12000", {.family=AF_UNSPEC, .hints=0|AI_ADDRCONFIG|AI_PASSIVE}) = 0:
家庭= 2,原型= 6 inet4:地址= 0.0.0.0,端口= 12000
在那里你可以看到我只有一个 IPv4 结果。