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

仅Windows 11环境下Winsock调用connect返回WSAEFAULT错误问题

问题原因
  • 核心原因是Windows 11对Winsock API的参数校验强度远高于之前的Windows版本,旧版本内置的兼容容错逻辑在Win11中被移除,代码中存在的不规范写法直接触发了严格校验逻辑。
  • 具体错误出在套接字创建逻辑:调用socket()函数创建套接字时第一个参数传入了AF_UNSPEC(未指定地址族),但后续调用connect()时传入的是IPv4专属的sockaddr_in结构体。旧版Windows会自动兼容这种地址族不匹配的情况,Win11则会判定传入的地址结构与套接字类型不匹配,直接抛出WSAEFAULT错误。
解决办法
  • 方案1(最快捷,适配现有IPv4逻辑):修改CConnection::Create()函数中的套接字创建代码,将地址族明确指定为IPv4的AF_INET,修改后的代码如下:
hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

修改后即可在Win11上正常运行,同时完全兼容Windows XP到Windows 10的所有系统版本。

  • 方案2(长期迭代,适配双栈环境):如果需要同时支持IPv4和IPv6连接,建议将已废弃的gethostbyname接口替换为getaddrinfo,根据解析得到的地址族动态创建对应类型的套接字,传入匹配的sockaddr结构体及对应长度,完全符合Winsock API规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:06