void CTcpAgent::AddFreeSocketObj(CONNID dwConnID, EnSocketCloseFlag enFlag, EnSocketOperation enOperation, int iErrorCode) { BOOL bDone = FALSE; TSocketObj* pSocketObj = FindSocketObj(dwConnID);; if(TUdpSocketObj::IsValid(pSocketObj)) { CReentrantWriteLock locallock(m_csClientSocket); if(TSocketObj::IsValid(pSocketObj)) { TSocketObj::Invalid(pSocketObj); bDone = TRUE; } } if(bDone) { CloseClientSocketObj(pSocketObj, enFlag, enOperation, iErrorCode); TSocketObj::Release(pSocketObj); { CReentrantWriteLock locallock(m_csClientSocket); m_mpClientSocket.erase(dwConnID); } { CCriSecLock locallock(m_csFreeSocket); m_lsFreeSocket.push_back(pSocketObj); } if(m_lsFreeSocket.size() > m_dwFreeSocketObjHold) CompressFreeSocket(m_dwFreeSocketObjPool); } }
void CTcpAgent::ReleaseClientSocket() { CReentrantWriteLock locallock(m_csClientSocket); for(TSocketObjPtrMapI it = m_mpClientSocket.begin(); it != m_mpClientSocket.end(); ++it) { TSocketObj* pSocketObj = it->second; CloseClientSocketObj(pSocketObj); DeleteSocketObj(pSocketObj); } m_mpClientSocket.clear(); }
void CTcpServer::AddFreeSocketObj(TSocketObj* pSocketObj, EnSocketCloseFlag enFlag, EnSocketOperation enOperation, int iErrorCode) { if(!InvalidSocketObj(pSocketObj)) return; CloseClientSocketObj(pSocketObj, enFlag, enOperation, iErrorCode); m_bfActiveSockets.Remove(pSocketObj->connID); TSocketObj::Release(pSocketObj); ReleaseGCSocketObj(); if(!m_lsFreeSocket.TryPut(pSocketObj)) m_lsGCSocket.PushBack(pSocketObj); }
void CTcpServer::AddFreeSocketObj(TSocketObj* pSocketObj, EnSocketCloseFlag enFlag, EnSocketOperation enOperation, int iErrorCode) { if(!InvalidSocketObj(pSocketObj)) return; CloseClientSocketObj(pSocketObj, enFlag, enOperation, iErrorCode); TSocketObj::Release(pSocketObj); { CReentrantWriteLock locallock(m_csClientSocket); m_mpClientSocket.erase(pSocketObj->connID); } if(!m_lsFreeSocket.TryPut(pSocketObj)) { m_lsGCSocket.PushBack(pSocketObj); if(m_lsGCSocket.Size() > m_dwFreeSocketObjPool) ReleaseGCSocketObj(); } }
void CTcpServer::AddFreeSocketObj(TSocketObj* pSocketObj, EnSocketCloseFlag enFlag, EnSocketOperation enOperation, int iErrorCode) { if(InvalidSocketObj(pSocketObj)) { CloseClientSocketObj(pSocketObj, enFlag, enOperation, iErrorCode); TSocketObj::Release(pSocketObj); { CReentrantWriteLock locallock(m_csClientSocket); m_mpClientSocket.erase(pSocketObj->connID); } { CCriSecLock locallock(m_csFreeSocket); m_lsFreeSocket.push_back(pSocketObj); } if(m_lsFreeSocket.size() > m_dwFreeSocketObjHold) CompressFreeSocket(m_dwFreeSocketObjPool); } }