我想使用getaddrinfo()读取所有地址(IPv4和IPv6)。 我的问题是getaddrinfo()是否在列表中返回IPv6地址,后跟IPv4。 假设我将AF_UNSPEC传递给getaddrinfo()并使用双栈。
答案 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地址。”