c - 带有第一个 NULL 参数的 getaddrinfo 给出第一个 IPv4 而不是 IPv6
问题描述
我面临与此 OP 相同的问题:getaddrinfo 在 IPv6 之前为 localhost 排序 IPv4?
虽然没有可以理解的答案,但为什么getaddrinfo(NULL, ...)
with AI_PASSIVE
flag 先返回 IPv4 然后再返回 IPv6?
解决方案
我面临与此 OP 相同的问题
什么问题?您和其他 OP 描述的行为在getaddrinfo()
. 如果您只想要 IPv6 地址,那么您可以在传递给该函数的提示结构中指定它。如果您想同时容纳 IPv4 和 IPv6 地址,那么您不能安全地假设它们将被返回的相对顺序。如果您更喜欢(比如说)IPv6,但愿意回退到 IPv4,那么您至少有两个合理的选择:
- 请求(仅)IPv6 地址。如果这没有产生任何可用地址,则单独请求 IPv4 地址。
- 在不指定地址族的情况下发出请求,只需准备在返回的列表中扫描过去的 IPv4 地址以搜索可接受的 IPv6 地址。
无论哪种方式,正确使用getaddrinfo()
总是需要您检查每个返回的地址以确定它是否符合您的要求,直到您找到一个符合要求或您用尽列表。
地址的顺序没有特别的“为什么”,除了简单的 C 库的实现者选择做事的方式。
推荐阅读
- python - 如何在python中读取多个大的.jsonl文件
- bash - Bash 配置文件语法错误:文件意外结束
- android - 在创建颤振项目时,我无法启动我的项目
- ms-access - Microsoft Access:无法添加记录;“计算机”的连接键不在记录集中
- java - 如何在firebase数据库android中存储对象的arraylist
- c++ - 灯光显示,但立方体没有出现
- android - 处理双击底部导航项以刷新片段的最佳方法是什么
- ruby-on-rails - 日期时间的 Ruby 求和持续时间
- javascript - Navigator.getUserMedia() 已弃用。如何更改为 MediaDevices.getUserMedia()
- kiosk-mode - 通过 Android Management API 的单一 webapp 信息亭模式