Beispiel #1
0
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();
}
Beispiel #2
0
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);
	}
}
Beispiel #3
0
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());
}
Beispiel #4
0
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();
}
Beispiel #5
0
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();
}
Beispiel #6
0
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;
		}
	}
}
Beispiel #7
0
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;
	}
}
Beispiel #8
0
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;
	}
}