C 带有fist NULL参数的getaddrinfo给出了第一个IPv4而不是IPv6
我面临的问题与此OP相同: 虽然没有可以理解的答案,为什么C 带有fist NULL参数的getaddrinfo给出了第一个IPv4而不是IPv6,c,sockets,udp,C,Sockets,Udp,我面临的问题与此OP相同: 虽然没有可以理解的答案,为什么getaddrinfo(NULL,…)withAI\u PASSIVE标志首先返回IPv4,然后返回IPv6 我面临着和这次行动一样的问题 什么问题?您和其他OP描述的行为在getaddrinfo()的行为文档中。如果只需要IPv6地址,则可以在传递给该函数的提示结构中指定该地址。如果您希望同时容纳IPv4和IPv6地址,则无法安全地假设它们返回的相对顺序。如果您喜欢(比如)IPv6,但愿意退回到IPv4,那么您至少有两个合理的选择: 请
getaddrinfo(NULL,…)
withAI\u PASSIVE
标志首先返回IPv4,然后返回IPv6
我面临着和这次行动一样的问题
什么问题?您和其他OP描述的行为在getaddrinfo()
的行为文档中。如果只需要IPv6地址,则可以在传递给该函数的提示结构中指定该地址。如果您希望同时容纳IPv4和IPv6地址,则无法安全地假设它们返回的相对顺序。如果您喜欢(比如)IPv6,但愿意退回到IPv4,那么您至少有两个合理的选择:
getaddrinfo()
总是要求您检查每个返回的地址,以确定它是否符合您的要求,直到您找到一个符合要求的地址,或者您耗尽了列表
对于地址的顺序没有特别的“为什么”,除了C库的实现者选择如何做之外