Exemplo n.º 1
0
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");
        }
    }
}