WinSock2 I/O六模型之五(重叠 I/O)

重叠 I/O和WSAEventSelect I/O模型区别:编程

        WSAEventSelect I/O模型是将套接字与事件对象绑定,有网络事件发生时,激发event,咱们本身去处理数据。网络

        重叠 I/O是over结构与event绑定,而后WSARecv(函数内部套接字与over绑定),当即返回。有数据到时event激发(数据接收在暗地进行),WaitFor等待到之后,将event重置为无信号,而后WSAGetOverlappedResult()判断暗地里的数据接收是否已经完成,若这个函数第四个参数设置为False,当其返回时数据已经接收好了,咱们作其余后续处理就行。没必要咱们像WSAEventSelect I/O模型那样等到event激发后,再去调用recv()、accept()、send()等函数处理数据。app

用到的函数:异步

      ①WSAOVERLAPPED结构体只有hEvent参数会用到。函数

        (1)调用WSACreateEvent()建立事件对象hEvent1
spa

        (2)hEvent1赋值给WSAOVERLAPPED结构体的hEvent。code

        (3)调用WSARecv()或者WSASend()函数,会关联套接字与结构体。对象

      ② WSAGetOverlappedResult(套接字,&结构体,&已传输数据量,FALSE,&flags)事件

            设置FALSE,完成后就会返回。
ip

重叠 I/O实例:

    书中P115编程模板:

        1.建立侦听套接字;

        2.接受链接;

        3.为接受链接的套接字建立WSAOVERLAPPED结构体,并赋值hEvent。

          4.借助结构体,调用WSARecv()发送异步请求;

          4.借助结构体,调用WSARecv()发送异步请求;

          5.WSAWaitForMultipleEvents()

          6. WSAGetOverlappedResult()

         7.WSAResetEvent()

           8.WSARecv()发送另外一个异步请求

           9.重复5~~8的步骤

相关文章
相关标签/搜索