- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
这样,应用程序便可引用事件数组中已传信的事件,并检索与哪个事件对应的套接字,判断到底是在哪个套接字上,发生了什么网络事件类型。对事件数组中的事件进行引用时,应该用WSAWaitForMultipleEvents的返回值,减去预声明值WSA_WAIT _EVENT_0,得到具体的引用值(即索引位置)。如: Index=WSAWaitForMultipleEvents ( …… ); MyEvent=EventArray [ Index – WSA_WAIT_EVENT_0 ]; 知道了产生网络事件的套接字后,接下来可调用WSAEnumNetworkEvents函数知道发生了什么类型的网络事件。该函数原型为: int WSANnumNetworkEvents ( SOCKET s, WSAEVENT hEventObject, LPWSANETWORKEVENTS lpNetworkEvents ); 其中, ●s参数标识套接字的描述宇。 ●hEventObject参数是可选的,用于标识需要重设的相应事件对象,由于事件对象处在一个“已传信”状态,所以可将它传入,令其自动成为“未传信”状态。如果不想用hEventObject参数来重设事件,那么可使用WSAResetEvent函数。 ●lpNetworkEvents参数是一个WSANETWORKEVENTS结构的数组,每一个元素记录了一个网络事件和相应的错误代码。 WSANETWORKEVENTS结构的格式为: typedef struct WSANETWORKEVENTS{ long lNetworkEvents; int iErrorCodes[ FD_MAX_EVENTS ]; } WSANETWORKEVENTS; 其中, ●lNetworkEvents参数用于指定套接字上发生的所有网络事件类型。 ●iErrorCode参数指定的是一个错误代码数组,同lNetworkEvents中的事件关联在一起。 针对每个网络事件类型,都存在着一个特殊的事件索引,名字与事件类型的名字类似,只是要在事件名字后面添加一个“_BIT”后缀字串即可。例如,对FD_READ事件类型来说,iErrorCode数组的索引标识符便是FD_READ_BIT。 完成了对WSANETWORKEVENTS结构中的事件处理之后,应用程序可在所有可用的套接字上继续等待更多的网络事件。 15.4 Winsock 2的扩展特性 15.4.1 原始套接字 与Winsock1.1仅支持TCP/IP协议栈不同,Winsock 2通过声明了一个Winsock DLL和底层协议栈间的标准服务提供接口(SPI),使一个 Winsock DLL能够同时访问不同软件开发商的多个底层协议栈,从而使用户能够同时使用多个传输协议。 应用程序可以通过调用WSAEnumProtocols函数得到目前可以使用的传输协议数目,并且得到与每个传输协议相关的信息,这些信息包含在PROTOCOL_INFO结构中。 Winsock1.1仅有一个地址簇(AF_INET),它包含了数量不多的一些众所周知的套接字类型和协议标识符,而Winsock 2除现有的地址簇、套接字类型和协议标识符以外,加入了许多惟一的,但是可能并不为大家所知的地址簇、套接字类型和协议标识符。 Winsock 2通过原始套接字这一重要的套接字类型来支持多种协议。通过原始套接字,程序员可以对网络底层的传输机制进行控制。原始套接字与前面提到的流套接字和数据报套接字的最大不同在于套接字的创建。在一般情况下,在Winsock为IP列出的目录中,并不存在SOCK_RAW这一套接字类型。因此,程序员在通过调用socket或WSASocket函数创建原始套接字时,必须自行设定SOCK_RAW标志。下面一段代码用于创建一个将ICMP作为一种基层IP协议的原始套接字: SOCKET s; s = socket (AF_INET,SOCK_RAW,IPPROTO_ICMP); // 或 s= WSASocket (AF_INET,SOCK_RAW,IPPROTO,NULL, // 0,WSA_FLAG_OVERLAPPED); if (s = = INVALID_SOCKET ) { // 创建失败 } 完成了原始套接字的创建之后,接下来的事情便是在发送及接收调用中,使用对应的套接字句柄。创建原始套接字时,无论是否设定了IP_HDRINCL选项,IP都会包含在接收到的任何返回数据中。 15.4.2 重叠I/O模型 Winsock 2引入了重叠I/O的概念,并且要求所有的传输协议提供者都
您可能关注的文档
- (云计算导论课件)第七章OpenStack简介.pptx
- (云计算导论课件)第四章大数据概述.pptx
- (云计算导论课件)第五章虚拟化技术.pptx
- (云计算导论课件)第一章云计算的演进.ppt
- 现代数控机床(第二版)第八章数控机床的典型部件.ppt
- 现代数控机床(第二版)第九章数控机床的液压与气压系统.ppt
- 现代数控机床(第二版)第七章高速数控机床及其技术.ppt
- 现代数控机床(第二版)第十章数控机床的选用、安装、调试、验收与保养.ppt
- 现代数控机床(第二版)第一章概述.ppt
- 现代网络技术(第二版)第1章计算机网络概述.ppt
- 信号、系统分析与控制(MATLAB版)第1章信号与系统的基本知识.ppt
- 信号、系统分析与控制(MATLAB版)第2章信号的时域分析.ppt
- 信号、系统分析与控制(MATLAB版)第3章信号的时域运算与.ppt
- 信号、系统分析与控制(MATLAB版)第4章连续信号的频域分析.ppt
- 信号、系统分析与控制(MATLAB版)第5章离散信号的频域分析.ppt
- 信号、系统分析与控制(MATLAB版)第6章快速傅立叶变换.ppt
- 信号、系统分析与控制(MATLAB版)第7章连续系统的时域和频域分析.ppt
- 信号、系统分析与控制(MATLAB版)第8章离散系统的时域和频域分析.ppt
- 信号、系统分析与控制(MATLAB版)第9章系统函数的零极点.ppt
- 信号、系统分析与控制(MATLAB版)第10章LTI控制系统的分析.ppt
最近下载
- 第14届国际数学教育大会标识及介绍.docx VIP
- 血友病教学课件.ppt VIP
- 《费尔巴哈的提纲》课件.ppt VIP
- 05S502 室外给水管道附属构筑物国标 建筑图集 汇编 .docx VIP
- 马工程系列《教育学原理》项贤明主编第一到十章全完整版课件PPT:产生发展、教育与社会人的发展、目的培养目标、制度、课程教学德育、教师学生等(1).pptx VIP
- 2025年山东能源集团公开招聘笔试参考题库附带答案详解.docx
- 积极心理学课件:构建积极生活,提升幸福感.ppt VIP
- 碘对比剂不良反应预防和处理课件.ppt VIP
- 糖尿病肾病合并肺部感染护理查房-幻灯片.ppt VIP
- 大学生安全教育(思政版):交通安全PPT教学课件.pptx VIP
文档评论(0)