getaddrinfo返回0成功但addrinfo*为null无地址是否可能?
getaddrinfo返回值与空结果问题解答 核心结论
符合POSIX标准的主流getaddrinfo实现(包括glibc、Windows WinSock、macOS系统自带libc),绝对不会出现返回0(调用成功)但输出的addrinfo*结果指针为NULL的情况。只要接口返回0,返回的地址链表就一定包含至少一个满足传入hints筛选条件的有效地址。
关于EAI_NODATA的说明
- 这个错误码是早期接口规范里专门定义的,对应「主机名存在,但没有匹配查询类型的地址记录」的场景:比如你强制查IPv4地址,但目标域名只有IPv6的AAAA记录,旧版本实现就会返回
EAI_NODATA。 - 现在这个错误码已经是过时的兼容项了:从glibc 2.34版本开始,多数现代libc都不再单独返回
EAI_NODATA,所有查不到匹配地址的场景统一返回EAI_NONAME错误码,代码里保留EAI_NODATA的判断分支只是为了兼容老旧系统版本。
特殊情况说明
只有极少数裁剪得非常不规范的嵌入式libc、第三方非官方移植的getaddrinfo版本可能存在bug,出现返回0但结果指针为空的情况,但这属于实现不符合标准的异常问题,不是接口本身定义的正常行为,常规桌面、服务器端开发完全不需要考虑这种场景。
内容的提问来源于stack exchange,提问作者bun9
相关产品推荐
相关产品推荐

