重疊 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的步驟