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()等函数处理数据。

用到的函数:

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

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

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

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

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

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

重叠 I/O实例:

    书中P115编程模板:

        1.创建侦听套接字;

        2.接受连接;

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

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

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

          5.WSAWaitForMultipleEvents()

          6. WSAGetOverlappedResult()

         7.WSAResetEvent()

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

           9.重复5~~8的步骤




你可能感兴趣的:(WinSock2 I/O六模型之五(重叠 I/O))