37 EV_SET(&ev, fd, EVFILT_READ, EV_DELETE, 0, 0, 0);
38 m_evs.emplace_back(std::move(ev));
42 EV_SET(&ev, fd, EVFILT_WRITE, EV_DELETE, 0, 0, 0);
43 m_evs.emplace_back(std::move(ev));
48 EV_SET(&ev, fd, EVFILT_READ, EV_ADD, 0, 0, 0);
49 m_evs.emplace_back(std::move(ev));
53 EV_SET(&ev, fd, EVFILT_WRITE, EV_ADD, 0, 0, 0);
54 m_evs.emplace_back(std::move(ev));
59 EV_SET(&ev, fd, EVFILT_READ, EV_ADD, 0, 0, 0);
60 m_evs.emplace_back(std::move(ev));
64 EV_SET(&ev, fd, EVFILT_WRITE, EV_ADD, 0, 0, 0);
65 m_evs.emplace_back(std::move(ev));
71 auto timeout = timespec{};
72 timeout.tv_sec = m_timeout_ms / 1000;
73 timeout.tv_nsec = (m_timeout_ms % 1000) * 1000000;
74 auto sz = std::max(1UL, m_evs.size());
75 auto evs = std::vector<struct kevent>(sz);
76 auto start_time = std::chrono::high_resolution_clock::now();
77 auto nev = kevent(m_kq,
79 static_cast<int>(m_evs.size()),
81 static_cast<int>(evs.size()),
89 auto ret = std::vector<event>();
91 if(m_timeout_enabled) {
92 auto end_time = std::chrono::high_resolution_clock::now();
93 if(end_time - start_time > std::chrono::milliseconds(m_timeout_ms)
95 ret.emplace_back(0,
true);
96 m_timeout_enabled =
false;
101 for(
size_t i = 0; i < static_cast<size_t>(nev); i++) {
103 if(ev.flags & EV_ERROR) {
106 ret.emplace_back(ev.ident,
false);