---------------------------------------------------異步選擇模型----------------------------------------------------------
異步選擇模型:異步選擇模型是windows的一種異步IO模型,主要是通過windows消息機制實現的。通過WSAAsyncSelect給SOCKET註冊感興趣的事件,並綁定對應的消息。當SOCKET有對應的事件發生時,內核會向窗口發送自定義消息。我們在對應的消息處理函數中,就可以處理相關的網絡連接。
WSAAsyncSelect是select模型的異步版本.
MFC程序實現:
//1.創建一個窗口類,繼承自窗口類
//2.使用類創建出窗口
//3.使用WSAAsyncSelect,給監聽SOCKET註冊網絡事件FD_ACCEPT,並將自定義消息,和創建的窗口的句柄作爲參數,傳遞給註冊函數。
//4.在自定窗口類中,自定義消息處理函數
//5.在消息處理函數中
The wParam parameter identifies the socket on which a network event has occurred. The low word of lParam specifies the network event that has occurred. The high word of lParam contains any error code.
//6.我們通過對lparam低位進行判斷,就可以知道發生了什麼網絡事件。通過wparam參數,我們可以知道網絡事件發生在那個套接字上。
//7.如果給一個套接字註冊多個網絡事件,切記一定要使用|(按位或),一次全部註冊。
根據,自己犯過的錯誤,可以推測,如果不一次全部註冊,後面的事件會覆蓋前面的事件。
//8.調用WSAAsyncSelect之後,默認會將套接字屬性設置爲非阻塞模式。(在非阻塞模式下recv會立即返回一個錯誤碼,需要自己反覆調用直到有可讀數據爲止。)(經過試驗認證,確實recv變成了非阻塞的)
它的優勢,主要就是是一種異步IO模型。。。。。