czxt3000 2020-04-13 12:51 采纳率: 73.4%
浏览 778
已采纳

请教WSAIoctl(.., SIO_RCVALL)监听网络, 返回10022,WinXP下可以,Win7下失败。

recSocket = socket(AF_INET, SOCK_RAW, IPPROTO_IP);  // WSASocket
if(recSocket == INVALID_SOCKET)
{
PrintInfo("\r\nsocket() error: %d", recSocket);
::WSACleanup();
nNetOK = -1;
return -2;
}

//setsockopt();.......set ip header

char hname[256];
struct hostent *pHost;
sockaddr_in addr;

if(gethostname(hname, sizeof(hname)) < -1)
{
PrintInfo("\r\ngethostname() error");
closesocket(recSocket);
recSocket = INVALID_SOCKET;
::WSACleanup();
nNetOK = -1;
return -3;
}
else
{
pHost = gethostbyname(hname);
addr.sin_addr = *(in_addr *)pHost->h_addr_list[0];
addr.sin_family = AF_INET;
addr.sin_port = htons(1234);    // >1024, IP层可填任意值

if(bind(recSocket, (struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR)
{
PrintInfo("\r\nbind() error");
closesocket(recSocket);
recSocket = INVALID_SOCKET;
::WSACleanup();
nNetOK = -1;
return -4;
}


#define SIO_RCVALL  (IOC_IN | IOC_VENDOR | 1)
u_long sio;
DWORD value;
if(WSAIoctl(recSocket, SIO_RCVALL, &sio, sizeof(sio), NULL, 0, &value, NULL, NULL) == SOCKET_ERROR)
{
                        前面都没问题,执行到这一步错误,错误下面为10022,系统为Win7_64,但是已经设置了管理员权限,应该没问题吧

int err= WSAGetLastError();


PrintInfo("\r\nWSAIoctl() error: %d", err );
closesocket(recSocket);
recSocket = INVALID_SOCKET;
::WSACleanup();
nNetOK = -1;
return -5;
}
      }
  • 写回答

3条回答 默认 最新

  • Rotch 2020-04-13 14:20
    关注

    10022对应的错误是WSAEINVAL
    cmd不是一个合法的命令;或者一个输入参数非法;或者命令对于该种类型的套接口不适用。
    // 我先看看你的代码,稍后
    WSAStartup()写了吗?
    而且你的第二个参数好像不对
    第二个参数我记得是 SIO 开头的,你检查一下WSAIoctl函数的参数
    // 我有段时间没弄了,记不太清了,先去补补课
    目前来讲应该是参数错误,你先将它改成 SIO 控制试试

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。