0

我正在与 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;
}

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

4

2 回答 2

2

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

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

于 2012-08-15T05:44:35.003 回答
1

据我记得你需要使用int on = 1而不是char ...

于 2009-07-12T08:08:43.910 回答