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:
- 请求(仅)IPv6地址。如果这不产生任何可用的地址,则单独请求IPv4地址。
- 在不指定地址系列的情况下发出请求,并且只需准备扫描返回列表中的过去IPv4地址以搜索可接受的IPv6地址。
无论哪种方式,正确使用getaddrinfo()
总是要求您检查每个返回的地址,以确定它是否符合您的要求,直到您找到一个或您耗尽列表。
地址顺序没有特别的“原因”,除了你的C库的实现者如何选择做事。
以上是关于getaddrinfo with fist NULL参数给出第一个IPv4而不是IPv6的主要内容,如果未能解决你的问题,请参考以下文章