1

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

4

3 回答 3

2

As already commented by Celada, RFC 3484 gives a suggested ordering for the returned results.

Specifically for GNU libc, the order can be controlled by /etc/gai.conf and customised as local policy.

于 2012-07-04T10:11:47.513 回答
1

答案在这里:

https://www.rfc-editor.org/rfc/rfc6724

操作系统应该(并且大多数情况下)遵循这个标准或它的先前版本。在getaddrinfo()选择目标地址时,如果应用程序没有绑定到特定地址,内核会选择源地址。

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

于 2014-03-31T09:50:21.727 回答
0

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

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

于 2014-06-12T09:17:17.263 回答