Beispiel #1
0
CONNID CUdpServer::HandleAccept(TUdpBufferObj* pBufferObj)
{
	CONNID dwConnID = FindConnectionID(&pBufferObj->remoteAddr);

	if(dwConnID == 0)
	{
		CCriSecLock locallock(m_csAccept);

		dwConnID = FindConnectionID(&pBufferObj->remoteAddr);

		if(dwConnID != 0)
			return dwConnID;
		else
		{
			dwConnID					= ::GenerateConnectionID();
			TUdpSocketObj* pSocketObj	= GetFreeSocketObj(dwConnID);

			memcpy(&pSocketObj->remoteAddr, &pBufferObj->remoteAddr, sizeof(SOCKADDR_IN));
			AddClientSocketObj(dwConnID, pSocketObj);
		}
	}

	if(FireAccept(dwConnID, &pBufferObj->remoteAddr) == HR_ERROR)
	{
		AddFreeSocketObj(dwConnID);
		dwConnID = 0;
	}

	return dwConnID;
}
Beispiel #2
0
CONNID CUdpServer::HandleAccept(TUdpBufferObj* pBufferObj)
{
	CONNID dwConnID = 0;

	{
		CCriSecLock locallock(m_csAccept);

		dwConnID = FindConnectionID(&pBufferObj->clientAddr);

		if(dwConnID == 0)
		{
			dwConnID					= ::GenerateConnectionID(m_dwConnID);
			TUdpSocketObj* pSocketObj	= GetFreeSocketObj(dwConnID);

			memcpy(&pSocketObj->clientAddr, &pBufferObj->clientAddr, pBufferObj->addrLen);
			AddClientSocketObj(dwConnID, pSocketObj);
		}
		else
			return dwConnID;
	}

	if(FireAccept(dwConnID, &pBufferObj->clientAddr) == ISocketListener::HR_ERROR)
	{
		AddFreeSocketObj(dwConnID);
		dwConnID = 0;
	}

	return dwConnID;
}