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; }
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; }