【问题标题】:Cannot bind to IPv6 address无法绑定到 IPv6 地址
【发布时间】: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 或输入:

wgethttp://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 结果。

【问题讨论】:

    标签: networking bind ipv6


    【解决方案1】:

    这发生在使用 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

    我希望这可以帮助某人。

    【讨论】:

      猜你喜欢
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 1970-01-01
      • 2020-02-20
      • 2017-04-13
      • 2012-06-15
      相关资源
      最近更新 更多