WinSock IO模型 -- WSAEventSelect模型事件触发条件说明

  1. FD_READ事件

l  调用WSAEventSelect函数时,如果当前有数据可读

l  有数据到达时,并且没有发送过FD_READ事件

l  调用recv/recvfrom函数后,仍然有数据可读时

  1. RD_WRITE事件

l  调用WSAEventSelect函数时,如果调用能够发送数据时

l  调用connect()/accept()后,连接已经建立时

l  调用send()/sendto()函数后,返回WSAEWOULDBLOCK错误后,再次调用send()/sendto()函数可能成功时

  1. FD_ACCEPT事件

l  调用WSAEventSelect函数时,有连接请求需要建立

l  连接请求到达,未有发送FD_ACCEPT事件

l  调用accept()函数后,还有连接请求需要建立

  1. FD_CONNECT事件

l  调用WSAEventSelect函数时,一个连接已经建立完成

l  调用connect()函数后,建立连接完成时

  1. FD_CLOSE事件

l  调用WSAEventSelect函数时,socket连接关闭

l  从容关闭,没有数据可读

l  执行shutdown()从容关闭,对方应答FIN后,无数据需要读取

l  对方关闭连接,WSAECONNRESET错误发生

Network Event description from MSDN. Good details for each event.

-----------------------------------------------------------------

Here is a summary of events and conditions for each asynchronous notification message.

  • FD_READ:

    1. When WSAAsyncSelect is called, if there is data currently available to receive.
    2. When data arrives, if FD_READ is not already posted.
    3. After recv or recvfrom is called, with or without MSG_PEEK), if data is still available to receive.

      Note  When setsockopt SO_OOBINLINE is enabled, data includes both normal data and OOB data in the instances noted above.
  • FD_WRITE:
    1. When WSAAsyncSelect called, if a send or sendto is possible.
    2. After connect or accept called, when connection established.
    3. After send or sendto fail with WSAEWOULDBLOCK, when send or sendto are likely to succeed.
    4. After bind on a connectionless socket. FD_WRITE may or may not occur at this time (implementation-dependent). In any case, a connectionless socket is always writeable immediately after a bind operation.
  • FD_OOB: Only valid when setsockopt SO_OOBINLINE is disabled (default).
    1. When WSAAsyncSelect called, if there is OOB data currently available to receive with the MSG_OOB flag.
    2. When OOB data arrives, if FD_OOB not already posted.
    3. After recv or recvfrom called with or without MSG_OOB flag, if OOB data is still available to receive.
  • FD_ACCEPT:
    1. When WSAAsyncSelect called, if there is currently a connection request available to accept.
    2. When a connection request arrives, if FD_ACCEPT not already posted.
    3. After accept called, if there is another connection request available to accept.
  • FD_CONNECT:
    1. When WSAAsyncSelect called, if there is currently a connection established.
    2. After connect called, when connection is established, even when connect succeeds immediately, as is typical with a datagram socket.
    3. After calling WSAJoinLeaf, when join operation completes.
    4. After connectWSAConnect, or WSAJoinLeaf was called with a nonblocking, connection-oriented socket. The initial operation returned with a specific error of WSAEWOULDBLOCK, but the network operation went ahead. Whether the operation eventually succeeds or not, when the outcome has been determined, FD_CONNECT happens. The client should check the error code to determine whether the outcome was successful or failed.
  • FD_CLOSE: Only valid on connection-oriented sockets (for example, SOCK_STREAM)
    1. When WSAAsyncSelect called, if socket connection has been closed.
    2. After remote system initiated graceful close, when no data currently available to receive (Be aware that, if data has been received and is waiting to be read when the remote system initiates a graceful close, the FD_CLOSE is not delivered until all pending data has been read).
    3. After local system initiates graceful close with shutdown and remote system has responded with "End of Data" notification (for example, TCP FIN), when no data currently available to receive.
    4. When remote system terminates connection (for example, sent TCP RST), and lParam will containWSAECONNRESET error value.

      Note  FD_CLOSE is not posted after closesocket is called.
  • FD_QOS:
    1. When WSAAsyncSelect called, if the quality of service associated with the socket has been changed.
    2. After WSAIoctl with SIO_GET_QOS called, when the quality of service is changed.
  • FD_GROUP_QOS: Reserved.
  • FD_ROUTING_INTERFACE_CHANGE:
      • After WSAIoctl with SIO_ROUTING_INTERFACE_CHANGE called, when the local interface that should be used to reach the destination specified in the IOCTL changes.
  • FD_ADDRESS_LIST_CHANGE:
      • After WSAIoctl with SIO_ADDRESS_LIST_CHANGE called, when the list of local addresses to which the application can bind changes.
时间: 2024-11-06 11:34:16

WinSock IO模型 -- WSAEventSelect模型事件触发条件说明的相关文章

【阿里云IoT+YF3300】4.Alink物模型之事件触发

名词解释:设备的功能模型之一,设备运行时的事件,事件一般包含需要被外部感知和处理的通知信息,可包含多个输出参数.如,某项任务完成的信息,或者设备发生故障或告警时的温度等,事件可以被订阅和推送. 在工控领域,通信的实时性非常重要,所以有所谓的工业以太网(时间敏感网络TSN).5G之所以成为未来物联网的基石,也是因为时延非常低(毫秒级),才能使无人驾驶落地成为可能. 不过在一些典型的物联网领域,其上传数据的频率却没有那么快,比如环境的温湿度,一般都是分钟级别上传.这就带来一个问题,如果上传的间隔比较

各浏览器对 onbeforeunload 事件的支持与触发条件实现有差异

标准参考 无. 问题描述 一般情况下,onbeforeunload 事件处理函数内会写入一些提示性语句,当用户的浏览器跳转到其他页面时,用来提醒用户当前页面将要跳转,请用户决定是否观看新页面.或者在 onbeforeunload 事件内处理一些业务逻辑,在浏览器跳转到新页面之前 ,执行一些业务逻辑,如保存用户浏览信息等. 简单的说这个事件应仅在页面 URL 发生变化时触发,但是在 IE 中 使用 JavaScript 伪协议执行脚本程序时,也会触发 onbeforeunload 事件. 造成的影

各浏览器对 onunload 事件的支持与触发条件实现有差异

标准参考 在 HTML 4.01 规范中关于 onunload 事件的描述是:当 document 从 window 中移除时,触发 onunload 事件. 关于 HTML 4.01 规范中 onunload 内在事件说明:http://www.w3.org/TR/html401/interact/scripts.html#adef-onunload . MSDN 中关于 onunload 事件的描述:http://msdn.microsoft.com/en-us/library/ms5369

10、网页制作Dreamweaver(扩展:各浏览器对 onunload 事件的支持与触发条件实现有差异)

标准参考 在 HTML 4.01 规范中关于 onunload 事件的描述是:当 document 从 window 中移除时,触发 onunload 事件. 关于 HTML 4.01 规范中 onunload 内在事件说明:http://www.w3.org/TR/html401/interact/scripts.html#adef-onunload . MSDN 中关于 onunload 事件的描述:http://msdn.microsoft.com/en-us/library/ms5369

从零开始学_JavaScript_系列(四)——jquery(基础,选择器,触发条件,动画,回调函数)

jQuery语法 (1)引用jquery文件及下载库: http://jquery.com/download/ 下载 Download the compressed, production jQuery 2.2.2 这个是用户版的,已经被精简和压缩. 然后使用 <script src="jquery.js"></script> 来启动这个库文件,记得将下载的文件重命名为jquery.js 也可以使用谷歌和微软的CDN,不过这里略. (2)jQuery语法 $ (

js事件触发

js事件触发 一.事件驱动 1.事件触发条件 javascript侦测到的用户的操作或是页面的一些行为(怎 么发生的) 2.事件源 引发事件的元素.(发生在谁的身上) 3.事件处理程序 对事件处理的程序或是函数 (发生了什么事) javascript事件 1.常用的鼠标事件 onclick 鼠标单击事件 ondblclick 鼠标双击事件 onmousedown 鼠标按下时的事件 onmouseup 鼠标抬起时的事件 onmousemove 鼠标移入事件,在内部移动也触发 onmouseover

winsock编程WSAEventSelect模型

winsock编程WSAEventSelect模型 WSAEventSelect模型和WSAAsyncSelec模型类似,都是用调用WSAXXXXXSelec函数将socket和事件关联并注册到系统,并将socket设置成非阻塞模式.二者不同之处在于socket事件的通知方法:WSAAsyncSelec模型利用窗口句柄和消息映射函数通知网络事件,而WSAEventSelect模型利用WSAEVENT通知网络事件.完成WSAEventSelect模型需要涉及以下函数或结构: 1:WSAEventS

三.Windows I/O模型之事件选择(WSAEventSelect )模型

1.事件选择模型:和异步选择模型类似的是,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知.对于异步选择模型采用的网络事件来说,它们均可原封不动地移植到事件选择模型.事件选择模型和异步选择模型最主要的差别在于网络事件会投递至一个事件对象句柄,而非投递至一个窗口例程.2.创建事件对象:事件选择模型要求应用程序针对打算使用事件选择模型的每一个套接字,首先创建一个事件对象.创建方法是调用WSACreateEvent函数,它的定义如下:WSAEVENT WSACreateEvent(

WSAEventSelect模型编程 详解

转自:http://blog.csdn.net/wangjieest/article/details/7042108 WSAEventSelect模型编程 WSAEventSelect模型编程这个模型是一个简单的异步事件模型,使用起来比较方便,现在说一下其的具体的用法和需要注意的地方.一,模型的例程(服务端):先举一个王艳平网络通信上的例子: [cpp] view plaincopyprint? //////////////////////////////////////////////////