void CTcpServer::ReleaseFreeSocket() { TSocketObj* pSocketObj = nullptr; while(m_lsFreeSocket.TryGet(&pSocketObj)) DeleteSocketObj(pSocketObj); VERIFY(m_lsFreeSocket.IsEmpty()); m_lsFreeSocket.Reset(); ReleaseGCSocketObj(TRUE); VERIFY(m_lsGCSocket.IsEmpty()); }
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(); } }