0

Win32 で raw ソケットと戦っていて、行き詰まりました。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;
}

私のコードに何が起こるか知っている人はいますか?

4

2 に答える 2

2

DWORD 1またはbool trueを使用する必要があります。char、int、DWORD、boolを使用したコードを示すドキュメントがたくさんありますが、正しいのはbookまたはDWORDであり、一部のシステムではおそらくintです...しかし、現在は次のように機能しましたブール。

ところで、Win7 で IP_HDRINCL を指定して同じ関数 setsockopt を実行すると、エラー 10014 WSAEFAULT が見つかりました。XP では動作しますが、Win7 では常に失敗し、理由がわかりません...最近の Windows バージョンでは無効になっている可能性があります。

于 2012-08-15T05:44:35.003 に答える