在用CSocket类进行网络通信时,我们会遇到验证连接超时的问题,CSocket在断开socket连接时不返回固定的时间,这样就降低了程序性能。下面介绍的这个类解决了这个问题。 只要输入超时的时间,程序就会返回这个时间值。 CSock类重载了CSocket类的成员函数ConnectHelper。

/// CSocket modify - timeout module. BOOL CSock::ConnectHelper(const SOCKADDR* lpSockAddr, int nSockAddrLen) { if (m_pbBlocking != NULL) { WSASetLastError(WSAEINPROGRESS); return FALSE; }
m_nConnectError = -1;
if (!CAsyncSocket::ConnectHelper(lpSockAddr, nSockAddrLen)) { if (GetLastError() == WSAEWOULDBLOCK) { // Insert.... CTime curt, st; CTimeSpan span(0, 0, 0, m_nTimeOut);
st = CTime().GetCurrentTime(); //....... while (PumpMessages(FD_CONNECT)) { if (m_nConnectError != -1) { WSASetLastError(m_nConnectError); return (m_nConnectError == 0); } // Insert.... curt = CTime().GetCurrentTime(); if(curt > (st+span)) return FALSE; //.............. } } return FALSE; } m_Kill = FALSE; return TRUE; }

|