- 1、本文档共105页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于TCPIP协议的网络编程-新
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * §3.10.2 I/O模型 第三章 基于TCP/IP协议的网络编程 为WSAEventSelect创建的事件拥有两种工作状态,以及两种工作模式。 两种工作状态:有信号(signaled)、无信号(nonsignaled)。 两种工作模式:人工重设(manual reset)、自动重设(auto reset)。 WSACreateEvent最开始的工作状态为无信号,并用一种人工重设模式,来创建事件句柄。随着网络事件触发了与一个套接字关联在一起的事件对象,工作状态便会从“无信号”转变成“有信号”。由于事件对象是在一种人工重设模式中创建的,所以在完成了一个I / O请求的处理之后,我们的应用程序需要负责将工作状态从已传信更改为未传信。要做到这一点,可调用 BOOL WSAResetEvent(WSAEVENT hEvent); 该函数唯一的参数便是一个事件句柄;基于调用是成功还是失败,会分别返回TRUE或FALSE。应用程序完成了对一个事件对象的处理后,便应调用WSACloseEvent函数,释放由事件句柄使用的系统资源。 BOOL WSACloseEvent(WSAEVENT hEvent); 该函数也要拿一个事件句柄作为自己唯一的参数,并会在成功后返回TRUE,失败后返回FALSE。 §3.10.2 I/O模型 第三章 基于TCP/IP协议的网络编程 第三步:套接字同事件对象关联在一起后,程序便可开始I/O处理;方法是等待网络事件触发事件对象句柄的工作状态。WSAWaitForMultipleEvents函数便是用来等待一个或多个事件对象句柄,并在事先指定的一个或所有句柄进入“有信号”状态后,或在超过了一个规定的时间周期后,立即返回。 WSAWaitForMultipleEvents函数的定义如下: DWORD WSAWaitForMultipleEvents( DWORD cEvents, const WSAEVENT FAR *lphEvent, BOOL fwaitAll, DWORD dwTimeout, BOOL fAlertable ); cEvents:指定的是事件对象的数量。 lphEvents:是一个指针,用于直接由WSAEVENT对象构成的一个数组。 §3.10.2 I/O模型 第三章 基于TCP/IP协议的网络编程 WSAWaitForMultipleEvents只能支持由WSA_MAXIMUM_WAIT_EVENTS对象规定的一个最大值64 。因此针对发出WSAWaitForMultipleEvents调用的每个线程,该I/O模型一次最多都只能支持64个套接字。假如想让这个模型同时管理不止64个套接字,必须创建额外的工作者线程,以便等待更多的事件对象。 fWaitAll:指定了WSAWaitForMultipleEvents如何等待在事件数组中的对象。若设为TRUE,那么只有等lphEvents数组内包含的所有事件对象都已进入“有信号”状态,函数才会返回;但若设为FALSE,任何一个事件对象进入“有信号”状态,函数就会返回。就后一种情况来说,返回值指出了到底是哪个事件对象造成了函数的返回。通常,应用程序应将该参数设为FALSE。 dwTimeout:规定了等待的最长时间,以毫秒为单位。超过规定的时间,函数就会立即返回,即使由fWaitAll参数规定的条件尚未满足。如超时值为0,函数会检测指定事件对象的状态,并立即返回。这样一来,应用程序实际便可实现对事件对象的“轮询”。如dwsTimeout设为WSA_INFINITE(永远等待),那么只有在一个网络事件传信了一个事件对象后,函数才会返回。 §3.10.2 I/O模型 第三章 基于TCP/IP协议的网络编程 fAlertable:使用WSAEventSelect模型的时候,它是可以忽略的,且应设为FALSE。该参数主要用于在重叠式I/O模型中,在完成例程的处理过程中使用。后面还会对此详述。 若WSAWaitForMultipleEvents收到一个事件对象的网络事件通知,便会返回一个值,指出造成函数返回的事件对象。这样一来,我们的应用程序便可引用事件数组中有信号的事件,并检索与那个事件对应的套接字,判断到底是在哪个套接字上,发生了什么网络事件类型。 对事件数组中的事件进行引用时,应该用WS
文档评论(0)