简介
重叠模型可运行在支持Winsock2的所有Windows平台,而完成端口只是支持NT系统。
使用重叠模型的应用程序通知缓冲区收发系统直接使用数据。也就是说,如果应用程序投递了一个10KB大小的缓冲区来接收数据,且数据已经到达套接字,则该数据将直接被拷贝到投递的缓冲区。
所谓投递,也就是通知系统管理相应缓冲区吧。
基于事件通知的重叠模型要收到64个等待事件的限制,而完成例程类似于回调函数。
流程
基于事件通知的重叠IO
01.创建套接字
02.监听连接
03.接入连接
04.创建重叠结构、事件
05.将重叠结构与事件关联
06.在套接字上投递WSARecv请求。(让WSAOVERLAPPED结构来替我们管理I/O 请求及相关缓冲区)
07.事件通知我们重叠操作的完成(WSAWaitForMultipleEvents函数)
08.如果以后还需要利用此事件,则使用WSAResetEvent函数重设当前用完事件对象
09.查询重叠操作结果(WSAGetOverlappedResult函数)
10.继续投递WSARecv请求
基于完成例程的重叠IO
01.编写完成例程
02.创建套接字
03.监听连接
04.接入连接
05.创建重叠结构
06.在套接字上投递WSARecv请求(将重叠结构与完成例程关联)(让WSAOVERLAPPED结构来替我们管理I/O 请求)
07.等待重叠操作完成( 调用WSAWaitForMultipleEvents函数或者SleepEx函数)
08.继续投递WSARecv请求
参考
手把手教你玩转SOCKET模型之重叠I/O篇
http://blog.csdn.net/piggyxp/archive/2004/09/23/114883.aspx
手把手教你玩转网络编程模型之完成例程(Completion Routine)篇
http://blog.csdn.net/PiggyXP/archive/2009/02/19/3910726.aspx