You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GetAddrInfoExW()中timeout参数为何触发EINVAL无效参数错误?

GetAddrInfoExW传入timeout参数触发EINVAL(10022)错误的原因

你的代码里timeval timeout{ 0, 999 };的问题出在tv_usec字段的取值不符合Windows DNS解析的要求:

当调用GetAddrInfoExW并指定NS_DNS作为名称空间时,timeout参数的tv_usec(微秒)部分必须满足两个条件之一:

  • 取值为0
  • 取值是1000的整数倍(因为Windows DNS解析器的时间精度是毫秒级,1毫秒=1000微秒)

你设置的999微秒既不是0,也不是1000的整数倍,因此函数判定参数无效,返回10022(EINVAL)。而传入nullptr时,函数会使用默认的超时逻辑,所以能正常执行。

修复方案

  • 只设置秒级超时,把tv_usec设为0:
    timeval timeout{ 1, 0 }; // 1秒超时
    
  • 设置毫秒级超时,确保tv_usec是1000的倍数:
    timeval timeout{ 0, 1000 }; // 1毫秒超时
    

注意:这个限制是Windows平台特有的,和POSIX系统的行为不同——POSIX允许tv_usec取0到999999之间的任意值,但Windows DNS服务的底层实现只支持毫秒级的超时粒度。

内容的提问来源于stack exchange,提问作者Vasily Starostin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 18:41:04