邪恶八进制信息安全团队技术讨论组's Archiver

sunwear 2005-8-24 05:12

[转载]IP_HDRINCL、SIO_RCVALL没有定义

信息来源:小四

Q:

编写raw socket程序时需要用到IP_HDRINCL,查阅MSDN后我包含了ws2tcpip.h,编译
时仍报错。

A: scz <[email]scz@nsfocus.com[/email]>

这是一个老问题了,参看:

[url]http://support.microsoft.com/kb/257460[/url]

必须在包含winsock2.h之后再包含ws2tcpip.h。类似的情形发生在使用SIO_RCVALL时,
必须在包含winsock2.h之后再包含mstcpip.h。有些人不仔细查看MSDN,就自己定义
了这两个宏,那是不必要的,不推荐这样的编程风格。

--------------------------------------------------------------------------
/*
* For x86/EWindows XP SP1 & VC 7
* cl winsock2_test.c /Fewinsock2_test.exe /nologo /Os /G6 /Gz /Gs65536 /W3 /WX /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /link /RELEASE
*/

#if 0
> winsock2_test.exe
IP_HDRINCL  = 0x00000002
SIO_RCVALL  = 0x98000001
#endif

#include <stdio.h>
/*
* 必须在包含windows.h之前包含winsock2.h
*/
#include <winsock2.h>
/*
* [url]http://support.microsoft.com/kb/257460[/url]
*
* ws2tcpip.h must be explicitly included after winsock2.h
*/
#include <ws2tcpip.h>
/*
* mstcpip.h must be explicitly included after winsock2.h
*/
#include <mstcpip.h>

#pragma comment( linker, "/INCREMENTAL:NO"    )
#pragma comment( linker, "/merge:.rdata=.text"  )
#pragma comment( linker, "/subsystem:console"  )

int __cdecl main ( int argc, char * argv[] )
{
   printf
   (

      "IP_HDRINCL  = 0x%08X\n"
      "SIO_RCVALL  = 0x%08X\n",
      IP_HDRINCL,
      SIO_RCVALL
   );
   return( 0 );
}  /* end of main */
--------------------------------------------------------------------------

页: [1]
© 1999-2008 EvilOctal Security Team