读书人

【网络编程】之10、重叠IO Overlapped

发布时间: 2012-09-22 21:54:54 作者: rapoo

【网络编程】之十、重叠IO Overlapped IO

winsock2 中引入了重叠I/O(Overlapped I/O)的概念并且要求所有的传输协议提供者都支持这一功能。 他的功能高于前面我们提过的三种,但是最强悍的还是我们后面要说的完成端口。

基本原理:让应用程序使用一个重叠的数据结构,一次投递一个活多个winsock I/O请求,针对那些提交的清酒,在他们完成之后,应用程序可为他们提供服务。 应用程序可通过ReadFile和WriteFile两个函数执行I/O操作。 要注意:重叠I/O仅能在由WSASocket函数打开的套接字上使用。要想在一个套接字上使用重叠I/O,首先必须使用 WSA_FLAG_OVERLAPPED 这个标志。

BOOL AcceptEx(  __in          SOCKET sListenSocket,//一个监听套接字  __in          SOCKET sAcceptSocket,//指定另一个套接字,负责对进入连接请求的“接受”  __in          PVOID lpOutputBuffer,//指定一个特殊的缓冲区,因为要负责三种数据的接收,服务器的本地地址,客户端的远程地址和新建连接上发送的第一个数据块。  __in          DWORD dwReceiveDataLength,//以字节为单位,指定在lpOutputBuffer缓冲区中,保留多大的空间来接收数据。  如果传0,那么就不会再接收任何数据了。  __in          DWORD dwLocalAddressLength,//  __in          DWORD dwRemoteAddressLength,//和上一个参数以字节为单位指定在lpOutputBuffer缓冲区中,保留多大空间,在一个套接字被接受的时候,用于本地和远程地址信息的保存  __out         LPDWORD lpdwBytesReceived,//用于返回接收到的实际数据量,以字节为单位。只有在以同步方式完成的前提下,才会设置这个参数。  __in          LPOVERLAPPED lpOverlapped//对应的是一个OVERLAPPED结构,允许AcceptEx以一种异步方式工作。 前面说过,只有在一个重叠I/O应用中,这个函数才需要使用事件对象通知机制。);
要知道AcceptEx函数只能由这里给大家说的“事件通知”方式获取异步I/O请求的结果,在"完成例程”中是无法使用的。



下面将讲述完成端口,那个更加高效,但是也更加困难;

2012/9/2

jofranks 于南昌


读书人网 >编程

热点推荐