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

Windows Socket编程调用recvfrom()出现WSA Error:10022问题求助

问题1:recvfrom返回10022错误的修复方案

触发错误的核心原因有3个,按优先级修改即可:

  • 未初始化recvfrom的地址长度参数
    代码中定义了int saddr_len;但没有赋值,Windows的recvfrom要求传入的地址长度参数必须提前初始化为目标地址结构体的大小,在调用recvfrom前添加一行:
    saddr_len = sizeof(SOCKADDR_STORAGE);
    
  • 原始套接字协议类型选择错误
    Windows下IPPROTO_RAW类型的原始套接字仅支持发送自定义IP报文,不支持接收数据。如果需要接收IP层报文,创建套接字时需要将第三个参数改为IPPROTO_IP,如果仅需要接收特定协议的报文,可以改为IPPROTO_UDP/IPPROTO_TCP等对应值:
    int sock_fd = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
    
  • 未绑定网卡接口
    和Linux下原始套接字可以不绑定直接抓包的逻辑不同,Windows下原始套接字必须显式bind到你要抓包的本地网卡的IP地址,才能正常接收对应网卡的流量。
  • 额外注意:运行原始套接字相关程序必须以管理员身份启动,否则创建套接字阶段就会权限不足。
问题2:Windows下协议头结构对应头文件

Windows平台有原生的协议头定义,不需要自己手动实现:

  • 头文件引用ws2ipdef.h、iphlpapi.h即可获得常用的协议头结构
  • IPv4头对应结构为IPV4_HDR,UDP头对应结构为UDP_HDR,TCP头对应结构为TCP_HDR,和Linux下ip.h、udp.h的结构字段定义基本一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:15:02