void CConnectionManager::ProcessNetData() { fd_set fdread; fd_set fdwrite; struct timeval tv = {0, 0}; FD_ZERO(&fdread); FD_ZERO(&fdwrite); for (int i = 0; i < m_ConnCount; i++) { FD_SET(m_ConnectionSet[i].GetSocket(), &fdread); FD_SET(m_ConnectionSet[i].GetSocket(), &fdwrite); } int nRet = select(0, &fdread, &fdwrite, NULL, &tv); if (nRet > 0) { for (int i = 0; i < m_ConnCount; i++) { SOCKET sClient = m_ConnectionSet[i].GetSocket(); if (FD_ISSET(sClient, &fdread)) //接收数据 { bool bRet = m_ConnectionSet[i].Recv(); if (bRet == false) { LOG_DEBUG("Client socket %d closed.", sClient); closesocket(sClient); ConnCallBack pFuncDelConn = CSocketServer::GetSingleton().GetDelConnFunc(); if (!pFuncDelConn) { continue; } (*pFuncDelConn)(&m_ConnectionSet[i]); DelConn(sClient); i--; continue; } else { ConnCallBack pFuncProcessInput = CSocketServer::GetSingleton().GetProcessInputFunc(); if (!pFuncProcessInput) { continue; } (*pFuncProcessInput)(&m_ConnectionSet[i]); } } if (FD_ISSET(sClient, &fdwrite)) //发送数据 { bool bRet = m_ConnectionSet[i].FlushSendBuff(); if (bRet == false) { LOG_DEBUG("Client socket %d closed.", sClient); closesocket(sClient); ConnCallBack pFuncDelConn = CSocketServer::GetSingleton().GetDelConnFunc(); if (!pFuncDelConn) { continue; } (*pFuncDelConn)(&m_ConnectionSet[i]); DelConn(sClient); i--; continue; } } } } }
void CleanUp(int type) { if (laddr) { LST *temp; temp = laddr->next; if (laddr->IP) free(laddr->IP); free(laddr); while (temp) { LST *t = temp; temp = temp->next; if (t->IP) free(t->IP); free(t); } } laddr = NULL; if (paddr) { PST *temp; temp = paddr->next; if (paddr->IP) free(paddr->IP); free(paddr); while (temp) { PST *t = temp; temp = temp->next; if (t->IP) free(t->IP); free(t); } } paddr = NULL; if (saddr) { SST *temp; temp = saddr->next; if (saddr->IP) free(saddr->IP); free(saddr); while (temp) { SST *t = temp; temp = temp->next; if (t->IP) free(t->IP); free(t); } } saddr = NULL; if (caddr) { CST *temp; temp = caddr->next; if (caddr->IP) free(caddr->IP); free(caddr); while (temp) { CST *t = temp; temp = temp->next; if (t->IP) free(t->IP); free(t); } } caddr = NULL; if (auser) { UST *temp; temp = auser->next; if (auser->uname) free(auser->uname); free(auser); while (temp) { UST *t = temp; temp = temp->next; if (t->uname) free(t->uname); free(t); } } auser = NULL; while (nconn) { if ((nconn->sfd != -1) && (type == 0) && (nconn->type == CT_CLIENT)) Send(nconn->sfd, "T\n"); DelConn(nconn->sfd); } nconn = NULL; }