重疊(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 );
相關文章
相關標籤/搜索