网络与域名解析

如果以前在 Windows 中调用AFINET6系列,GetAddrInfo 失败并出现WSAHOSTNOTFOUND(11001)错误 - Windows Server

· 52CE 我爱测

本文解决了在AF\INET6系列的另一次调用后调用时 GetAddrInfo 收到WSAHOST\NOT\FOUND错误的问题。 适用于:Windows 10 - 所有版本原始 KB 数: 4057932 现象 假设出现了下面这种情景: - 使用不带任何后缀的平面名称来运行主机名的查询。 - 你有一个后缀搜索列表,此主机名可通过列表中最后一个后缀以外的其中一个后缀解析。 - 首先为 AF\INET6 系列运行 GetAddrInfo ,然后为 AF\INE

本文解决了在AF_INET6系列的另一次调用后调用时 GetAddrInfo 收到WSAHOST_NOT_FOUND错误的问题。

适用于:Windows 10 - 所有版本原始 KB 数: 4057932

现象

假设出现了下面这种情景:

  • 使用不带任何后缀的平面名称来运行主机名的查询。
  • 你有一个后缀搜索列表,此主机名可通过列表中最后一个后缀以外的其中一个后缀解析。
  • 首先为 AF_INET6 系列运行 GetAddrInfo ,然后为 AF_INET 系列运行该命令。

在此方案中,函数无法解析提供的主机名,并且会收到“WSAHOST_NOT_FOUND(11001)”错误消息。

例如,你有以下环境:

  • 后缀搜索列表:contoso.com、、 foo.contoso.com``bar.contoso.com
  • 尝试解析的主机名:测试
  • 主机 DNS A 记录存在于: foo.contoso.com

尝试运行以下示例代码时,调用失败并出现 11001 错误。

hints.ai_socktype = SOCK_STREAM;
                hints.ai_protocol = IPPROTO_TCP;
                hints.ai_flags = 0;
                hints.ai_family = AF_INET6;
getaddrinfo("test", NULL, &hints, &res)
hints.ai_family = AF_INET;
getaddrinfo("test", NULL, &hints, &res)

解决方法

可以使用以下方法避免此问题。 如果出现以下情况,则不会出现此问题:

  • 对家庭使用AF_UNSPEC,让我们的代码为你确定 A/AAAA 结果。
  • 将带有匹配主机 A 记录的后缀作为后缀搜索列表中的最后一个条目。
  • 在 DNS 客户端上禁用负缓存。
  • 传递要解析的完全限定主机名。

第一个选项是建议的方法,因为通常不需要为每个家庭执行调用,并且 Windows 经过更好的优化,以返回两个家庭的最佳结果集。

资料来源与适用范围

资料来源
微软官方中文故障文档
适用范围
适用于:Windows 10 - 所有版本原始 KB 数: 4057932
内容语言
中文;命令、路径和错误标识保留技术原文
本地收录日期
2026-10-26
授权说明
CC BY 4.0

正文与所需资源由本站本地存储。查看来源及更新记录 ↗

请按适用版本和实际日志确认原因;本站没有对每一种系统或设备逐项执行文中的操作。