【问题标题】:Set IP_HDRINCL to setsockopt function in win32win32中设置IP_HDRINCL为setsockopt函数
【发布时间】:2009-07-12 07:56:33
【问题描述】:

我在 Win32 中使用原始套接字,现在我被卡住了,soetsockopt 函数给了我 10022 错误(无效参数),但我认为我传递了正确的参数......当然我错了 u_u '

sock = socket(AF_INET,SOCK_RAW,IPPROTO_UDP);
if (sock == SOCKET_ERROR)
{
  printf("Error socket(): %d", WSAGetLastError());
  return;
}
char on = 1;
error =  setsockopt(sock,IPPROTO_IP,IP_HDRINCL,&on,sizeof(on)); 
if (sock == SOCKET_ERROR)
{
  printf("Error setsockopt(): %d", WSAGetLastError());
  return;
}

有人知道我的代码发生了什么吗?

【问题讨论】:

    标签: c++ winapi sockets setsockopt


    【解决方案1】:

    您应该使用 DWORD 1 或 bool true,有很多文档显示带有 char、int、DWORD、bool 的代码,但正确的是 book 或 DWORD,在某些系统中可能是 int……但目前它有效对我来说是布尔值。

    顺便说一句,我在 Win7 中使用 IP_HDRINCL 执行相同的函数 setsockopt 时发现错误 10014 WSAEFAULT,它在 XP 中有效,但在 Win7 中它总是失败并且不知道为什么......也许它最近被禁用了Windows 版本?

    【讨论】:

      【解决方案2】:

      据我所知,您需要使用 int on = 1 而不是 char...

      【讨论】:

      • 这是真的! :D 谢谢Artyom!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-19
      • 2013-07-06
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多