在win32中将IP_HDRINCL设置为setsockopt函数

时间:2009-07-12 07:56:34

标签: c++ winapi sockets setsockopt

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

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

2 个答案:

答案 0 :(得分:2)

你应该使用DWORD 1或bool true,有很多文档显示带有char,int,DWORD,bool的代码,但是右边的是book或DWORD,在某些系统中可能是int ...但是目前它工作了对我来说是布尔。

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

答案 1 :(得分:1)

据我记得,您需要使用int on = 1代替char ...