37 retval = epoll_ctl(m_epoll, EPOLL_CTL_DEL, fd,
nullptr);
47 ev.events |= EPOLLOUT;
49 auto it = m_tracked.find(fd);
50 if(it == m_tracked.end()) {
51 retval = epoll_ctl(m_epoll, EPOLL_CTL_ADD, fd, &ev);
54 retval = epoll_ctl(m_epoll, EPOLL_CTL_MOD, fd, &ev);
64 constexpr auto n_events = 1024;
65 auto evs = std::array<struct epoll_event, n_events>();
66 auto start_time = std::chrono::high_resolution_clock::now();
67 auto event_count = epoll_wait(m_epoll,
70 static_cast<int>(m_timeout_ms));
71 if(event_count == -1) {
76 auto ret = std::vector<event>();
78 if(m_timeout_enabled) {
79 auto end_time = std::chrono::high_resolution_clock::now();
80 if(end_time - start_time > std::chrono::milliseconds(m_timeout_ms)
81 && event_count == 0) {
82 ret.emplace_back(0,
true);
83 m_timeout_enabled =
false;
88 for(
size_t i = 0; i < static_cast<size_t>(event_count); i++) {
91 ret.emplace_back(fd,
false);