64,282
社区成员
发帖
与我相关
我的任务
分享
//svr就是线程的回调
int CEpollLoop::svr()
{
socklen_t socklen;
socklen = sizeof(struct sockaddr);
int nEventsNum = 0;
struct epoll_event events[MAX_EPOLL_EVENT];
while(!m_flag)
{
nEventsNum = epoll_wait(m_epollFd, events, MAX_EPOLL_EVENT, -1);
if (nEventsNum > 0)
{
for (int nIndex = 0; nIndex < nEventsNum; ++nIndex)
{
sEpollEventPtr * se = (sEpollEventPtr *)events[nIndex].data.ptr;
if(se->se && m_accFD == se->se->GetSock())
{
for(;;)
{
struct sockaddr_in addrClient;
int nSocketClient = accept(m_accFD, (struct sockaddr *)&addrClient, &socklen);
if(nSocketClient == -1)
{
break;
}
//这个里面会注册事件EPOLLIN | EPOLLET | EPOLLOUT | EPOLLRDHUP | EPOLLERR | EPOLLHUP
RigisterEvent();
}
}
else if((events[nIndex].events & EPOLLRDHUP) || (events[nIndex].events & EPOLLERR) || (events[nIndex].events & EPOLLHUP))
{
error();
}
else if(events[nIndex].events & EPOLLIN)
{
read();
}
else if(events[nIndex].events & EPOLLOUT)
{
send();
}
}
}
usleep(1);
}// end while
return eNetSuccess;
}