35 else if (!tq.empty()) {
37 if ((now.mono_time() - tq.front().expiry()) > 100
ms) {
54 epoll_.
del(notify_.
fd());
61 if (fd >=
static_cast<int>(data_.size())) {
64 auto&
ref = data_[fd];
65 epoll_.
add(fd, ++
ref.sid, events);
68 return {*
this, fd,
ref.sid};
74 using namespace chrono;
98 now = CyclTime::now();
101 throw system_error{
ec};
131 using namespace chrono;
133 const auto& tq = tqs_[
High];
137 next =
min(next, tq.front().expiry() - 200u
s);
141 const auto& tq = tqs_[
Low];
144 next =
min(next, tq.front().expiry());
150int Reactor::dispatch(CyclTime now, Event*
buf,
int size)
153 for (
int i{0};
i <
size; ++
i) {
156 const auto fd = epoll_.
fd(
ev);
157 if (fd == notify_.
fd()) {
161 const auto&
ref = data_[fd];
167 const auto sid = epoll_.
sid(
ev);
182 ref.slot(now, fd, events);
183 }
catch (
const std::exception& e) {
184 TOOLBOX_ERROR <<
"exception in i/o event handler: " << e.what();
191void Reactor::set_events(
int fd,
int sid,
unsigned events,
IoSlot slot, error_code&
ec)
noexcept
193 auto&
ref = data_[fd];
194 if (
ref.sid == sid) {
195 if (
ref.events != events) {
196 epoll_.mod(fd, sid, events,
ec);
206void Reactor::set_events(
int fd,
int sid,
unsigned events,
IoSlot slot)
208 auto&
ref = data_[fd];
209 if (
ref.sid == sid) {
210 if (
ref.events != events) {
211 epoll_.
mod(fd, sid, events);
218void Reactor::set_events(
int fd,
int sid,
unsigned events, error_code&
ec)
noexcept
220 auto&
ref = data_[fd];
221 if (
ref.sid == sid &&
ref.events != events) {
222 epoll_.mod(fd, sid, events,
ec);
230void Reactor::set_events(
int fd,
int sid,
unsigned events)
232 auto&
ref = data_[fd];
233 if (
ref.sid == sid &&
ref.events != events) {
234 epoll_.
mod(fd, sid, events);
239void Reactor::unsubscribe(
int fd,
int sid)
noexcept
241 auto&
ref = data_[fd];
242 if (
ref.sid == sid) {
#define TOOLBOX_PROBE_SCOPED(provider, name,...)