关于Winsock2.h的一点问题

Ping_Fani07 2013-08-09 09:56:33
#define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */

这是在winsock2.h第29行的代码,看这意思是避免因为包含windows.h而间接包含winsock.h这个老版本的头文件。资料显示:“Windows Sockets2实际上是Windows Sockets1.1接口的一个超集,它在保持和Windows Sockets1.1完全向后兼容能力的同时,扩展了Windows Sockets接口”。依此似乎可以做出推断,winsock2.h是对winsock.h的完全取代,它应该完全包含winsock.h的内容。但实际的情况是,至少有些宏定义只在winsock.h存在,而在winsock2.h中却没有出现,而这些宏中又有一些是实际编程中经常会用到的。
所以我就很好奇,winsock.h与winsock2.h之间到底算是什么关系?编程时使用winsock2.h的话,那些只在winsock.h中有而winsock2.h中没的宏,又该在哪找定义?

下面是我上文所提到的那些宏:
(1)winsock.h有如下对套接口所用协议【socket()函数的第三个参数要用】的宏定义,winsock2.h里面没有;
/*
* Protocols
*/
#define IPPROTO_IP 0 /* dummy for IP */
#define IPPROTO_ICMP 1 /* control message protocol */
#define IPPROTO_IGMP 2 /* group management protocol */
#define IPPROTO_GGP 3 /* gateway^2 (deprecated) */
#define IPPROTO_TCP 6 /* tcp */
#define IPPROTO_PUP 12 /* pup */
#define IPPROTO_UDP 17 /* user datagram protocol */
#define IPPROTO_IDP 22 /* xns idp */
#define IPPROTO_ND 77 /* UNOFFICIAL net disk proto */

#define IPPROTO_RAW 255 /* raw IP packet */
#define IPPROTO_MAX 256

(2)winsock.h有如下对协议地址簇【socket()函数的第1个参数要用】的宏定义,winsock2.h里面没有。
/*
* Address families.
*/
#define AF_UNSPEC 0 /* unspecified */
#define AF_UNIX 1 /* local to host (pipes, portals) */
#define AF_INET 2 /* internetwork: UDP, TCP, etc. */
#define AF_IMPLINK 3 /* arpanet imp addresses */
#define AF_PUP 4 /* pup protocols: e.g. BSP */
#define AF_CHAOS 5 /* mit CHAOS protocols */
#define AF_IPX 6 /* IPX and SPX */
#define AF_NS 6 /* XEROX NS protocols */
#define AF_ISO 7 /* ISO protocols */
#define AF_OSI AF_ISO /* OSI is ISO */
#define AF_ECMA 8 /* european computer manufacturers */
#define AF_DATAKIT 9 /* datakit protocols */
#define AF_CCITT 10 /* CCITT protocols, X.25 etc */
#define AF_SNA 11 /* IBM SNA */
#define AF_DECnet 12 /* DECnet */
#define AF_DLI 13 /* Direct data link interface */
#define AF_LAT 14 /* LAT */
#define AF_HYLINK 15 /* NSC Hyperchannel */
#define AF_APPLETALK 16 /* AppleTalk */
#define AF_NETBIOS 17 /* NetBios-style addresses */
#define AF_VOICEVIEW 18 /* VoiceView */
#define AF_FIREFOX 19 /* FireFox */
#define AF_UNKNOWN1 20 /* Somebody is using this! */
#define AF_BAN 21 /* Banyan */

#define AF_MAX 22

但是两个文件中都有如下的协议簇定义,是不是很奇怪?
/*
* Protocol families, same as address families for now.
*/
#define PF_UNSPEC AF_UNSPEC
#define PF_UNIX AF_UNIX
#define PF_INET AF_INET
#define PF_IMPLINK AF_IMPLINK
#define PF_PUP AF_PUP
#define PF_CHAOS AF_CHAOS
#define PF_NS AF_NS
#define PF_IPX AF_IPX
#define PF_ISO AF_ISO
#define PF_OSI AF_OSI
#define PF_ECMA AF_ECMA
#define PF_DATAKIT AF_DATAKIT
#define PF_CCITT AF_CCITT
#define PF_SNA AF_SNA
#define PF_DECnet AF_DECnet
#define PF_DLI AF_DLI
#define PF_LAT AF_LAT
#define PF_HYLINK AF_HYLINK
#define PF_APPLETALK AF_APPLETALK
#define PF_VOICEVIEW AF_VOICEVIEW
#define PF_FIREFOX AF_FIREFOX
#define PF_UNKNOWN1 AF_UNKNOWN1
#define PF_BAN AF_BAN

#define PF_MAX AF_MAX
...全文
204 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
smwhotjay 2013-08-19
  • 打赏
  • 举报
回复
引用 4 楼 Ping_Fani07 的回复:
[quote=引用 3 楼 smwhotjay 的回复:] wsock32.dll winsock.h ws2_32.dll winsock2.h mswsock.dll mswsock.h
您能看清楚我的问题描述再作答么?[/quote] 看来你没看懂. winsock.h与winsock2.h之间到底算是什么关系? 编程时使用winsock2.h的话,那些只在winsock.h中有而winsock2.h中没的宏,又该在哪找定义? sock2兼容1的.定义有的改了名的.
Ping_Fani07 2013-08-19
  • 打赏
  • 举报
回复
引用 3 楼 smwhotjay 的回复:
wsock32.dll winsock.h ws2_32.dll winsock2.h mswsock.dll mswsock.h
您能看清楚我的问题描述再作答么?
Ping_Fani07 2013-08-12
  • 打赏
  • 举报
回复
引用 1 楼 evahelen_study 的回复:
你看一下《Winsock网络编程经络》,winsock.h与winsock2.h分别是Winsock版本1.1和2.0使用的头文件。这有很多的socket源码,可参考: http://download.csdn.net/detail/geoff08zhang/4571358
感谢这位兄台推荐的资源,看起来还不错!但我想您可能没理解我问题的重点,在问之前我还是有尝试自己解决的,我查过相关的资料,所以关于winsock.h与winsock2.h基本的知识我还是知道的。 我所困惑的,我迫切想知道的,主要还是第二个问题,即“编程时使用winsock2.h的话,那些只在winsock.h中有而winsock2.h中没的宏,又该在哪找定义?” 希望有所了解的前辈们都帮我解答一下,谢谢~
smwhotjay 2013-08-12
  • 打赏
  • 举报
回复
wsock32.dll winsock.h ws2_32.dll winsock2.h mswsock.dll mswsock.h
evahelen_study 2013-08-11
  • 打赏
  • 举报
回复
你看一下《Winsock网络编程经络》,winsock.h与winsock2.h分别是Winsock版本1.1和2.0使用的头文件。这有很多的socket源码,可参考: http://download.csdn.net/detail/geoff08zhang/4571358

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧