Установите IP_HDRINCL для функции setsockopt в Win32 - PullRequest
0 голосов
/ 12 июля 2009

Я борюсь с необработанными сокетами в 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 ]

2 голосов
/ 15 августа 2012

Вы должны использовать DWORD 1 или bool true, есть много документов, которые показывают код с char, int, DWORD, bool, но правильным является book или DWORD, возможно, int в некоторых системах ... но в настоящее время это работает для меня как бул.

Кстати, я обнаружил ошибку 10014 WSAEFAULT при выполнении той же функции setsockopt с IP_HDRINCL в Win7, она работает в XP, но в Win7 она всегда дает сбой и не знает почему ... возможно, она отключена в последнее время Версии Windows?

1 голос
/ 12 июля 2009

Насколько я помню, нужно использовать int on = 1 вместо символа ...

...