void Epoll::wait(Events& p_events) const { boost::scoped_array<epoll_event> events(new epoll_event[m_size]); ::memset(events.get(), 0, m_size * sizeof (epoll_event)); int eventsLen = ::epoll_wait(m_epollFd, events.get(), m_size, -1); if (eventsLen < 0) { throw std::runtime_error("Epoll wait failed"); } for (int i = 0; i < eventsLen; ++i) { if (events[i].data.fd == m_selfStopPipes[0]) { p_events.clear(); break; } else { EventTypes ets; nativeEvents(events[i].events, ets); p_events.push_back(Event(ets, events[i].data.fd)); } } }
void clear () { m_events.clear(); }