在我的Ubuntu业力系统上,我面临着一个奇怪的问题。
当我用AI_PASSIVE和AF_UNSPEC调用getaddrinfo()时,对于一个空主机和UDP 12000端口来获得一个可绑定的地址,我只返回一个IPv4结果AF_UNSPEC)。
如果更改调用并指定AF_INET6而不是AF_UNSPEC,那么getaddrinfo()将返回“名称或服务未知”。
我不应该得到:12000吗?
如果我将主机设置为::1,也会发生同样的情况。
当我为主机"localhost“和UDP 12000端口调用getaddrinfo()而不带127.0.0.1:12000. (以获得”可连接“地址)时,首先得到:1:12000,然后是
显然,我的系统已经准备好了IPv6 (我可以同时访问IPv4和IPv6地址,以及DNS解析)。但是,为什么我不能将getaddrinfo()绑定到一个IPv6地址呢?
你们知道会出什么事吗?
我的操作系统是Ubuntu业力,新安装没有任何网络调整。
谢谢。
如果你不知道,但仍然想帮我,你可以得到这个样本程序或输入:
给我的结果是:
$ ./gai -ap空12000
我的结果是:
$ ./gai -ap空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结果。
发布于 2010-03-27 12:39:59
这种情况发生在使用eglibc:德比安的新系统上。
显然,有一个错误要求您将至少一个有效的IPv6地址设置到您的网络接口之一(回送不算)。
在我做完这些之后:
$sudoIP-6addr 2001:660:4701:1001:1 dev eth0
我有:
$ ./gai -ap空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 family=10,proto= 6 inet6: addr=::,port=12000,flowinfo=0
我希望这能帮上忙。
https://stackoverflow.com/questions/2529149
复制相似问题