Set IP_HDRINCL to setsockopt function in win32

2019-08-21 17:43发布

I'm fighting with raw sockets in Win32 and now I'm stuck, the soetsockopt function give me the 10022 error (invalid argument), but I think I pass the correct arguments... of course I'm wrong 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;
}

Anybody knows what happen to my code?

2条回答
▲ chillily
2楼-- · 2019-08-21 18:06

As far as I remember you need to use int on = 1 instead of char...

查看更多
一纸荒年 Trace。
3楼-- · 2019-08-21 18:19

You should use DWORD 1 or bool true, there are lots of documents that show code with char, int, DWORD, bool, but the right one is book or DWORD, maybe int in some systems... but currently it worked for me as bool.

By the way, I've found error 10014 WSAEFAULT when executing the same function setsockopt with IP_HDRINCL in Win7, it works in XP but in Win7 it always fails and don't know why... maybe it is disabled in recent windows versions?

查看更多
登录 后发表回答