int32_t CEpoll::HandleMessage(int32_t nWaitTimeout) { if(m_nEpollFD <= 0) { Delay(10000); return -1; } int32_t nEventCount = epoll_wait(m_nEpollFD, m_pEpollEvent, m_nMaxFD, nWaitTimeout); if(nEventCount < 0) { return -1; } for(int32_t i = 0; i < nEventCount; ++i) { CSocket *pSocket = (CSocket *)m_pEpollEvent[i].data.ptr; if(pSocket == NULL) { continue; } SessionStatus nSessionStatus = pSocket->GetSessionStatus(); if((nSessionStatus == enmSessionStatus_Closed) || (nSessionStatus == enmSessionStatus_Error)) { continue; } if((m_pEpollEvent[i].events & EPOLLIN) != 0) { pSocket->ReadEvent(); SessionStatus nSessionStatus = pSocket->GetSessionStatus(); if((nSessionStatus == enmSessionStatus_Closed) || (nSessionStatus == enmSessionStatus_Error)) { continue; } } if((m_pEpollEvent[i].events & EPOLLOUT) != 0) { pSocket->WriteEvent(); SessionStatus nSessionStatus = pSocket->GetSessionStatus(); if((nSessionStatus == enmSessionStatus_Closed) || (nSessionStatus == enmSessionStatus_Error)) { continue; } } if((m_pEpollEvent[i].events & EPOLLERR) != 0) { pSocket->ErrorEvent(); SessionStatus nSessionStatus = pSocket->GetSessionStatus(); if((nSessionStatus == enmSessionStatus_Closed) || (nSessionStatus == enmSessionStatus_Error)) { continue; } } if((m_pEpollEvent[i].events & EPOLLHUP) != 0) { pSocket->ErrorEvent(); SessionStatus nSessionStatus = pSocket->GetSessionStatus(); if((nSessionStatus == enmSessionStatus_Closed) || (nSessionStatus == enmSessionStatus_Error)) { continue; } } // if(!(m_pEpollEvent[i].events & EPOLLIN) && // !(m_pEpollEvent[i].events & EPOLLOUT) && // !(m_pEpollEvent[i].events & EPOLLERR) && // !(m_pEpollEvent[i].events & EPOLLHUP)) // { // g_FrameLogEngine.WriteNetioLog(enmLogLevel_Error, "it's not found ioevent = 0x%08x\n", m_pEpollEvent[i].events); // } } return nEventCount; }