getaddrinfo()会先返回IPv6地址吗?

时间:2012-06-28 09:06:46

标签: ipv6 getaddrinfo

我想使用getaddrinfo()读取所有地址(IPv4和IPv6)。 我的问题是getaddrinfo()是否在列表中返回IPv6地址,后跟IPv4。 假设我将AF_UNSPEC传递给getaddrinfo()并使用双栈。

3 个答案:

答案 0 :(得分:2)

正如Celada已经评论过的那样,RFC 3484给出了返回结果的建议顺序。

特别是对于GNU libc,订单可以由/etc/gai.conf控制并自定义为本地策略。

答案 1 :(得分:1)

答案在这里:

http://tools.ietf.org/html/rfc6724

操作系统应该(并且大部分都是)遵循此标准或其先前版本。当getaddrinfo()选择目标地址时,如果应用程序未绑定到特定地址,则内核会选择源地址。

默认情况下,全局本机IPv6地址优先于所有IPv4地址。

答案 2 :(得分:0)

这实际上取决于名称服务器和操作系统。 getaddrinfo()从名称服务器获取dns解析信息。如果您的名称服务器在IPv4地址之前订购IPv6地址,它将在IPv4地址之前返回IPv6地址。

默认情况下,IPv6地址的优先级高于IPv4地址。 @Pavel Simerda写道 - “默认情况下,全局本地IPv6地址优先于所有IPv4地址。”