如何配置Windows 2019中gethostbyname的调用超时时长?
配置Windows中gethostbyname的调用超时时长(针对Windows Server 2019)
问题背景
在Windows 10中调用Dns.GetHostAddresses("an_hostname_that_does_not_exist");时,若主机名不存在,会阻塞30秒才抛出异常;Windows Server 2019中该阻塞时长约10秒,Windows Server 2012则不足1秒。需求是不修改调用代码的前提下,调整Windows Server 2019中gethostbyname(Dns.GetHostAddresses最终依赖的底层接口)的超时时长。
解决方案:通过注册表配置DNS查询参数
可通过修改DNS客户端服务的注册表项来调整查询超时,具体步骤如下:
- 打开注册表编辑器:运行
regedit命令 - 定位到注册表路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters - 添加/修改以下DWORD类型的注册表项:
- QueryTimeout:设置单次DNS查询的超时时间(单位:毫秒),例如设为
1000代表1秒 - MaxRetryCount:设置DNS查询的重试次数,默认通常为2次
总阻塞时长计算公式:
QueryTimeout * (MaxRetryCount + 1),包含初始查询和所有重试的时间总和 - QueryTimeout:设置单次DNS查询的超时时间(单位:毫秒),例如设为
- 应用配置:重启DNS客户端服务(执行命令
net stop dnscache && net start dnscache),或直接重启系统
验证与补充
- 修改完成后,测试
Dns.GetHostAddresses对不存在主机名的查询,观察阻塞时长是否符合预期 - 若注册表中原本没有上述项,手动创建即可
- 这些配置会影响系统中所有依赖DNS客户端服务的网络查询操作
- 如果配置未生效,检查是否有组策略或其他系统设置覆盖了注册表项
内容的提问来源于stack exchange,提问作者R SG
相关产品推荐
相关产品推荐

