EV_NONE = 0x00, /* no events */
EV_READ = 0x01, /* ev_io detected read will not block */
EV_WRITE = 0x02, /* ev_io detected write will not block */
+ EV_EXCEPTION= 0x04, /* ev_io detected exceptional condition */
EV__IOFDSET = 0x80, /* internal use only */
EV_IO = EV_READ, /* alias for type-detection */
EV_TIMER = 0x00000100, /* timer timed out */
ev.data.u64 = (uint64_t)(uint32_t)fd
| ((uint64_t)(uint32_t)++anfds [fd].egen << 32);
ev.events = (nev & EV_READ ? EPOLLIN : 0)
- | (nev & EV_WRITE ? EPOLLOUT : 0);
+ | (nev & EV_WRITE ? EPOLLOUT : 0)
+ | (nev & EV_EXCEPTION ? EPOLLPRI : 0);
if (expect_true (!epoll_ctl (backend_fd, oev && oldmask != nev ? EPOLL_CTL_MOD : EPOLL_CTL_ADD, fd, &ev)))
return;
int fd = (uint32_t)ev->data.u64; /* mask out the lower 32 bits */
int want = anfds [fd].events;
int got = (ev->events & (EPOLLOUT | EPOLLERR | EPOLLHUP) ? EV_WRITE : 0)
- | (ev->events & (EPOLLIN | EPOLLERR | EPOLLHUP) ? EV_READ : 0);
+ | (ev->events & (EPOLLIN | EPOLLERR | EPOLLHUP) ? EV_READ : 0)
+ | (ev->events & (EPOLLPRI | EPOLLERR | EPOLLHUP) ? EV_EXCEPTION : 0);
/*
* check for spurious notification.
* but we closed it).
*/
ev->events = (want & EV_READ ? EPOLLIN : 0)
- | (want & EV_WRITE ? EPOLLOUT : 0);
+ | (want & EV_WRITE ? EPOLLOUT : 0)
+ | (want & EV_EXCEPTION ? EPOLLPRI : 0);
/* pre-2.6.9 kernels require a non-null pointer with EPOLL_CTL_DEL, */
/* which is fortunately easy to do for us. */