void Epoll::mainloop(int timeout) { for ( ; ; ) { epoll_event events[kMaxEpollEvent]; int count = epoll_wait(epfd_, events, kMaxEpollEvent, timeout); for (int i = 0; i != count; ++i) { EventHandler *handler = (EventHandler*)(events[i].data.ptr); if (events[i].events & EPOLLOUT) { handler->on_writeable(*this); } else if (events[i].events & EPOLLIN) { handler->on_readable(*this); } else if (events[i].events & EPOLLRDHUP) { handler->on_peer_closed(*this); } } if (count < 0 && errno != EINTR) { err_print("epoll wait error"); } } }