gpt4 book ai didi

macos - getaddrinfo 可以返回哪些地址族?

转载 作者:行者123 更新时间:2023-12-03 11:55:53 25 4
gpt4 key购买 nike

当我调用 getaddrinfoAF_UNSPEC ,理论上它可以返回任何它喜欢的地址族:AF_INET , AF_INET6 ,也许是 AppleTalk、蓝牙、datalink、netlink 地址……

实际上,它只返回 AF_INETAF_INET6在大多数平台上:

  • 在 FreeBSD 上,它只能返回 AF_INETAF_INET6 ( checkin 源)
  • 在 linux 上,同上(根据 glibc 手册页)
  • 在 Windows 上,类似地,“ai_family 的 AF_UNSPEC 值表示调用者将只接受 AF_INET 和 AF_INET6 地址系列。” [MSDN, getaddrinfo]

  • 其他系统呢?是否有我们可以获得其他地址结构的平台?

    我特别怀疑 MacOS - opensource.apple.com/source/Libc 中似乎缺少源代码,并且手册页没有说明。我们有一个来自 Mac 测试运行的不可重现的日志文件,它可能表明 getaddrinfo 返回了一些其他地址系列。我们支持的其他平台是 AIX、Solaris、HP-UX。

    我知道我可以在返回的结构中检查家庭。我无法猜测可能需要使用哪些有趣的字符串和提示来获得非 AF_INET(6) 结果。

    最佳答案

    没有任何形式的保证。当我发明了自己的协议(protocol)并分配了一个数字(本地),并且我的协议(protocol)可以解析您的程序给出的名称时,允许返回 sockaddr为我的地址家庭。

    基本上,如果你通过 AF_UNSPEC , 你可以做以下两件事之一:

  • 生活危险,假设 PF_*常量映射到 AF_*常量,创建该类型的套接字并连接它,为您提供对我的自制协议(protocol)的即时支持,或者更好,
  • 忽略具有您不理解的地址系列的任何结果并继续下一个。

  • 您需要注意,很可能可以查找名称但没有所需类型的地址。使用 AF_UNSPEC 进行查找时,然后您将获得肯定的查找结果,并且需要自己创建错误条件。

    由于应用程序的理想行为是在第一个结果不工作的情况下依赖其他结果(想想 DNS 循环与故障服务器),这可以通过迭代结果直到成功并调整错误来实现原因(即以“没有所需类型的地址”开头,如果找到一个并且连接失败,请切换到“无法访问目标”)。

    关于macos - getaddrinfo 可以返回哪些地址族?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18407191/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com