void CIocpServer::CloseClientSocket() { CCriSecLock locallock1(m_csClientSocket); for(TSocketObjPtrMapI it = m_mpClientSocket.begin(); it != m_mpClientSocket.end(); ++it) { TSocketObj* pSocketObj = it->second; { CCriSecLock2 locallock2(pSocketObj->crisec); SOCKET& sock = pSocketObj->socket; if(sock != INVALID_SOCKET) { shutdown(sock, SD_RECEIVE); ::ManualCloseSocket(sock, FALSE, TRUE); sock = INVALID_SOCKET; } } DeleteSocketObj(pSocketObj); } m_mpClientSocket.clear(); }
void CIocpServer::CompressFreeSocket(size_t size) { CCriSecLock locallock(m_csFreeSocket); while(m_lsFreeSocket.size() > size) { TSocketObj* pSocketObj = m_lsFreeSocket.front(); m_lsFreeSocket.pop_front(); DeleteSocketObj(pSocketObj); } }
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 CUdpServer::ReleaseClientSocket() { CReentrantWriteLock locallock(m_csClientSocket); for(TUdpSocketObjPtrMapI it = m_mpClientSocket.begin(); it != m_mpClientSocket.end(); ++it) { TUdpSocketObj* pSocketObj = it->second; DeleteSocketObj(pSocketObj); } m_mpClientAddr.clear(); m_mpClientSocket.clear(); }
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::ReleaseGCSocketObj(BOOL bForce) { TSocketObj* pSocketObj = nullptr; DWORD now = ::TimeGetTime(); while(m_lsGCSocket.PopFront(&pSocketObj)) { if(bForce || (now - pSocketObj->freeTime) >= m_dwFreeSocketObjLockTime) DeleteSocketObj(pSocketObj); else { m_lsGCSocket.PushBack(pSocketObj); break; } } }
void CTcpServer::CompressFreeSocket(size_t size, BOOL bForce) { CCriSecLock locallock(m_csFreeSocket); while(m_lsFreeSocket.size() > size) { TSocketObj* pSocketObj = m_lsFreeSocket.front(); if(bForce || ::GetTimeGap32(pSocketObj->freeTime) >= m_dwFreeSocketObjLockTime) { m_lsFreeSocket.pop_front(); DeleteSocketObj(pSocketObj); } else break; } }
void CTcpAgent::CompressFreeSocket(size_t size, BOOL bForce) { CCriSecLock locallock(m_csFreeSocket); DWORD now = ::TimeGetTime(); while(m_lsFreeSocket.size() > size) { TSocketObj* pSocketObj = m_lsFreeSocket.front(); if(bForce || (now - pSocketObj->freeTime) >= m_dwFreeSocketObjLockTime) { m_lsFreeSocket.pop_front(); DeleteSocketObj(pSocketObj); } else break; } }