重叠(Overlapped)IO模型

基本思想:容许应用程序使用重叠数据结构一次投递一个或者多个异步IO请求。数据结构

提交IO请求完成后,与之关联的重叠数据结构中的事件对象受信,应用程序即可使用WSAVerlappedResult函数获取重叠操做结果。app

1建立数据:异步

SOCKET sListen = ::WSASocket(AF_INET,SOCK_STREAM,IPPROTO_TCP,                 NULL,0,WSA_FLAG_OVERLAPPED);

2传输数据:WSASend WSARecv(tcp)     WSASendTo WSARecvFromtcp

  应用程序两种方法接收到重叠IO请求操做完成的通知:函数

    1) 与WSAOVERLAPPED结构关联的事件对象上等待,IO操做完成后,事件受信ui

    2) 使用lpCompetionRoutine只想完成例程spa

3 接受链接: AcceptEx,接受新的链接,返回本地和远程地址,取得客户程序发送的第一块数据code

  若是投递的请求成功完成:则发生下面3个动做:对象

    1) 接受了新的链接blog

    2) 新链接的本地地址和远程地址都会返回

    3) 接收到了远程主机发来的第一块数据

为了直接调用AcceptEx而不是用Mswsock.lib库,须要使用WSAIcotl函数将AcceptEx函数加载到内存,记载AcceptEx函数:

GUID GuidAcceptEx = WSAID_ACCEPTEX; DWORD dwBytes; WSAIotcl( pListen->s, SIO_GET_EXTENSION_FUNCTION_POINTER, &GuidAcceptEx, sizeof(GuidAcceptEx), &pListen->lpfnAcceptEx, sizeof(pListen->lpfnAcceptEx), &dwBytes, NULL, NULL );
相关文章
相关标签/搜索