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