[转载]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]