Установите IP_HDRINCL для функции setsockopt в win32.

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

Кто-нибудь знает, что случилось с моим кодом?


person Alfre2    schedule 12.07.2009    source источник


Ответы (2)


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

person Artyom    schedule 12.07.2009
comment
Это так! :D Спасибо Артём! - person Alfre2; 12.07.2009

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

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

person Kanito    schedule 15.08.2012