2009-07-12 16 views
0

Je me bats avec des sockets raw dans Win32 et maintenant je suis bloqué, la fonction soetsockopt me donne l'erreur 10022 (argument non valide), mais je pense que je passe les bons arguments ... bien sûr, je me trompe u_u 'Définir IP_HDRINCL à la fonction setsockopt dans win32

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; 
} 

Quelqu'un sait ce qui arrive à mon code?

Répondre

1

Pour autant que je me rappelle que vous devez utiliser int on = 1 au lieu de char ...

+0

C'est vrai! : D Merci Artyom! – Alfre2

2

Vous devez utiliser DWORD 1 ou bool vrai, il y a beaucoup de documents qui montrent code avec char, int, DWORD, bool, mais le bon est livre ou DWORD, peut-être int dans certains systèmes ... mais actuellement cela a fonctionné pour moi comme bool. Par ailleurs, j'ai trouvé l'erreur 10014 WSAEFAULT lors de l'exécution de la même fonction setsockopt avec IP_HDRINCL dans Win7, cela fonctionne sous XP mais dans Win7 il échoue toujours et ne sait pas pourquoi ... peut-être qu'il est désactivé dans versions récentes de Windows?