WSAEventSelect模型

WSAEventSelect模型,容許應用程序在一個或者多個套接字上接受基於時間的網絡通知,也接受FD_XXX類型的網絡事件,依靠windows的消息驅動機制和事件對象關聯起來。編程

基本思路:爲感興趣的一組網絡事件建立個事件對象,調用WSAEventSelect函數將網絡事件和事件對象關聯起來.windows

winsock建立事件對象的函數WSACreateEvent,定義:數組

WSAEVENT WSACreateEvent(void);//返回一個手工設置的事件對象句柄

建立之後,調用WSAEventSelect函數指定網絡事件與它關聯到一塊兒網絡

int WSAEventSelect( SOCKET s, WSAEVENT hEventObject,//事件對象句柄
                   long lNetWorkEvents//感興趣的組合
                   );

WSAWaitForMultipleEvents函數在一個或者多個事件上等待,當等待事件對象受信,或者指定事件過去時,函數返回函數

DWORD WSAWaitForMultipleEvents( DWORD cEvents,//指定下面所指數組中的事件對象句柄的個數
    const WSAEVENT* lphEvents,//指向事件對象句柄數組
    BOOL fWaitAll,//指定是否等待全部事件對象編程受信狀態
    DWORD dwTimeout,//指定等待時間
    BOOL fAlertable//使用WSAEventSelect能夠忽略
);

最多支持WSA_MAXIMUM_WAIT_EVENTS個對象,定義爲64.測試

WSAWaitForMultipleEvents等待網絡事件的發生spa

過了指定事件:返回WSA_WAIT_TIMEOUT 指定事件內有網絡事件發生:返回值指明發生事件對象 函數調用失敗:返回WSA_WAIT_FAILED

dwTimeout值爲0,指定事件對象狀態,當即返回,測試是否受信code

fWaitAll設置爲false後,若是有幾個,也只能指明一個,句柄最前面的那個...對象

 

對象受信,找到相應的套接字,調用WSAEnumNetWorkEvents函數,便可查看發生了什麼網絡事件blog

int WSAEnumNetWorkEvents( SOCKET s, WSAEVENTS hEventObject, LPWSANETWORKEVENTS lpNetworkEvents );

最後一個參數用於取得套接字發生的網絡事件和相關的錯誤代碼

typedef struct _WSANETWORKEVENTS{ long lNetworkEvents;//指定發生的網絡事件
    int iErrorCode[FD_MAX_EVENTS];//取得錯誤代碼
}WSANETWORKEVENTS,*LPWSANETWORKEVENTS;
相關文章
相關標籤/搜索