Exemplo n.º 1
0
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);
	}
}
Exemplo n.º 2
0
void CIocpServer::AddFreeSocketObj(DWORD dwConnID, BOOL bClose, BOOL bGraceful, BOOL bReuseAddress)
{
	BOOL bDone	= FALSE;

	{
		CCriSecLock locallock1(m_csClientSocket);
		CCriSecLock locallock2(m_csFreeSocket);

		TSocketObjPtrMapI it = m_mpClientSocket.find(dwConnID);

		if(it != m_mpClientSocket.end())
		{
			TSocketObj* pSocketObj = it->second;
			if(bClose && pSocketObj->socket != INVALID_SOCKET)
			{
				::ManualCloseSocket(pSocketObj->socket, bGraceful, bReuseAddress);
				pSocketObj->socket = INVALID_SOCKET;
			}

			m_mpClientSocket.erase(it);
			m_lsFreeSocket.push_back(pSocketObj);

			bDone = TRUE;
		}
	}

	if(bDone && m_lsFreeSocket.size() > m_dwFreeSocketObjHold)
		CompressFreeSocket(m_dwFreeSocketObjPool);
}
Exemplo n.º 3
0
void CUdpServer::AddFreeSocketObj(CONNID dwConnID)
{
	BOOL bDone = FALSE;
	TUdpSocketObj* pSocketObj = nullptr;

	{
		CReentrantWriteLock locallock(m_csClientSocket);

		pSocketObj = FindSocketObj(dwConnID);
		if(pSocketObj != nullptr)
		{
			m_mpClientAddr.erase(&pSocketObj->clientAddr);
			m_mpClientSocket.erase(dwConnID);
			bDone = TRUE;
		}
	}

	if(bDone)
	{
		{
			CCriSecLock locallock(m_csFreeSocket);

			pSocketObj->freeTime = ::TimeGetTime();
			m_lsFreeSocket.push_back(pSocketObj);
		}

		if(m_lsFreeSocket.size() > m_dwFreeSocketObjHold)
			CompressFreeSocket(m_dwFreeSocketObjPool);
	}
}
Exemplo n.º 4
0
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);
	}
}
Exemplo n.º 5
0
void CTcpAgent::ReleaseFreeSocket()
{
	CompressFreeSocket(0, TRUE);
}
Exemplo n.º 6
0
void CTcpServer::ReleaseFreeSocket()
{
	CompressFreeSocket(0, TRUE);
}
Exemplo n.º 7
0
void CIocpServer::ReleaseFreeSocket()
{
	CompressFreeSocket(0);
}