getaddrinfo with fist NULL参数给出第一个IPv4而不是IPv6

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了getaddrinfo with fist NULL参数给出第一个IPv4而不是IPv6相关的知识,希望对你有一定的参考价值。

我面临与此OP相同的问题:getaddrinfo sorting IPv4 before IPv6 for localhost?

虽然没有可以理解的答案,为什么getaddrinfo(NULL, ...)AI_PASSIVE旗帜首先返回IPv4然后返回IPv6?

答案

我面临与此OP相同的问题

什么问题?您和其他OP描述的行为属于getaddrinfo()记录的行为。如果只需要IPv6地址,则可以在传递给该函数的提示结构中指定。如果要同时容纳IPv4和IPv6地址,则无法安全地假设它们将返回的相对顺序。如果您更喜欢(比如说)IPv6,那么您至少有两个合理的选择,但愿意回归到IPv4:

  1. 请求(仅)IPv6地址。如果这不产生任何可用的地址,则单独请求IPv4地址。
  2. 在不指定地址系列的情况下发出请求,并且只需准备扫描返回列表中的过去IPv4地址以搜索可接受的IPv6地址。

无论哪种方式,正确使用getaddrinfo()总是要求您检查每个返回的地址,以确定它是否符合您的要求,直到您找到一个或您耗尽列表。

地址顺序没有特别的“原因”,除了你的C库的实现者如何选择做事。

以上是关于getaddrinfo with fist NULL参数给出第一个IPv4而不是IPv6的主要内容,如果未能解决你的问题,请参考以下文章

NASM x86,FIST 的意外结果

Fist

python学习手册.fist

EF 下的code fist 模式编程

the fist blood of java-eclipse 哈哈哈哈 封装的运用

浅谈getaddrinfo函数的超时处理机制