V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Niris
V2EX  ›  编程

getaddrinfo() 的查询结果有误,怎么解决?

  •  
  •   Niris · 2013-06-12 15:15:14 +08:00 · 3309 次点击
    这是一个创建于 3968 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最早是因为运行 tornado 的 hello world 演示都会出错,找了找问题,发现根源是 getaddrinfo 这个调用。

    系统是 linux,禁用了 ipv6。可是 getaddrinfo 的查询结果中,却包含了 ipv6 的地址,在后面尝试调用 connect 的时候,由于实际上不支持 ipv6,程序就出错了。

    还有像是 python 的 socket.has_ipv6,返回的是 True,为什么没识别出系统禁用了 ipv6?

    网上搜了一圈,发现有人有类型情况 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=470289 ,里面的讨论说是路由的问题?没弄明白。

    总结一下:系统禁用了 ipv6,但 getaddrinfo 的结果却有 ipv6 的地址,为什么?怎么解决?

    用 python 演示下就是下面这样

    >>> socket.getaddrinfo(None, 8888, type=socket.SOCK_STREAM)
    [(2, 1, 6, '', ('127.0.0.1', 8888)), (10, 1, 6, '', ('::1', 8888, 0, 0))]
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5397 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:54 · PVG 16:54 · LAX 01:54 · JFK 04:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.