当我用 调用getaddrinfo
时AF_UNSPEC
,理论上它可以返回它喜欢的任何地址族:AF_INET
,AF_INET6
,也许是 AppleTalk,蓝牙,数据链路,网络链路地址......
在实践中,它只是返回AF_INET
并且AF_INET6
在大多数平台上:
- 在 FreeBSD 上,它只能返回
AF_INET
或AF_INET6
(签入源代码) - 在 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) 结果。