重叠 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的步骤