سؤال

أقاتل مع مآخذ الخام في 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;
}

يعرف أي شخص ما يحدث لرمزي؟

هل كانت مفيدة؟

المحلول

بقدر ما أتذكر أنك بحاجة إلى استخدام int on = 1 بدلا من char ...

نصائح أخرى

يجب عليك استخدام DWORD 1 أو BOOL TRUE، وهناك الكثير من المستندات التي تظهر الكود مع Char، Int، DWORD، BOOL، ولكن الشخص المناسب هو كتاب أو DWORD، ربما int int في بعض الأنظمة ... ولكن حاليا يعمل بالنسبة لي bool.

بالمناسبة، لقد وجدت خطأ 10014 Wsaefault عند تنفيذ نفس الوظيفة Setsockopt مع ip_hdrincl في Win7، فإنه يعمل في XP ولكن في Win7 فاشل دائما ولا أعرف لماذا ... ربما يتم تعطيله في إصدارات Windows الأخيرة؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top