在長連接應用中,連接可能因為各種原因中斷,所以妳需要自動重連。妳需要根據CAsyncSocket的成員變量m_hSocket來判斷當前連接狀態:
if(m_hSocket==INVALID_SOCKET)
當然,很奇怪的是,即使連接已經中斷,OnClose也已經被觸發,妳還是需要在OnClose中調用Close,否則m_hSocket並不會被自動賦值為INVALID_SOCKET。
在很多長連接應用中,除建立連接以外,還需要先Login,然後才能進行業務處理,連接並Login是壹個步驟依賴性過程,用異步方式處理反而會很麻煩,而CAsyncSocket是支持切換為同步模式的,妳應該掌握在適當的時候切換同異步模式的方法:
DWORD dw;
//切換為同步模式
dw=0;
IOCtl(FIONBIO,&dw);
...
//切換回異步模式
dw=1;
IOCtl(FIONBIO,&dw);