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

2013-06-12 15:15:14 +08:00
 Niris
最早是因为运行 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))]
3417 次点击
所在节点    编程
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/72135

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX