void CServerSocket::OnAccept(int nErrorCode) { CSingleLock sl(&m_csClientLock, TRUE); if( nErrorCode != 0 ) { TRACE("CServerSocket::OnAccept Error : %d\n", ::WSAGetLastError()); } else { // 빈 클라이언트를 찾는다 long nClientID = -1; long nMaxClient = (long)m_vecnbClientUsed.size(); for(long i = 0; i < nMaxClient; i++) { if(m_vecnbClientUsed[i] == FALSE) { nClientID = i; break; } } if(nClientID != -1) { if(m_vecpClient[nClientID] == NULL) m_vecpClient[nClientID] = new CClientSocket; CClientSocket *pCurSocket = m_vecpClient[nClientID]; pCurSocket->InitClient(m_nClientStartID + nClientID, m_hParentWnd, m_bUseReceiveCallback, m_pParentPtr, __CallbackDataReceive); m_vecnbClientUsed[nClientID] = TRUE; m_vecpClient[nClientID]->m_bConnect = TRUE; Accept(*pCurSocket, NULL, NULL); TRACE("CServerSocket::OnAccept\n"); if(m_hParentWnd) ::PostMessage(m_hParentWnd, UWM_SOCKET_UPDATE_CONNECTION, nClientID, EVT_CONSUCCESS); else __CallbackDataReceive(m_pParentPtr, nClientID, (BYTE *) - 1, EVT_CONSUCCESS); } else { CSocket Socket; Accept(Socket, NULL, NULL); Socket.ShutDown(); Socket.Close(); } } CAsyncSocket::OnAccept(nErrorCode); }