无法绑定到IPv6地址

时间:2010-03-27 11:49:24

标签: networking bind ipv6

我的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或输入:

  

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

并告诉我结果:

  

$ ./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结果。

1 个答案:

答案 0 :(得分:2)

这种情况发生在使用eglibc的新系统上:debian-glibc

显然,有一个错误需要您为其中一个网络接口设置至少一个有效的IPv6地址(环回不计算在内)。

我这样做之后:

  

$ sudo ip -6 addr add 2001:660:4701:1001 :: 1 dev eth0

我有:

  

$ ./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

     

family = 10,proto = 6 inet6:addr = ::, port = 12000,flowinfo = 0

我希望这可以帮助别人。