|
|
|
@ -424,18 +424,6 @@ int fdevent_poll(fdevents *ev, int timeout_ms) {
|
|
|
|
|
return ev->poll(ev, timeout_ms);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int fdevent_event_get_revent(fdevents *ev, size_t ndx) {
|
|
|
|
|
if (ev->event_get_revent == NULL) SEGFAULT();
|
|
|
|
|
|
|
|
|
|
return ev->event_get_revent(ev, ndx);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int fdevent_event_get_fd(fdevents *ev, size_t ndx) {
|
|
|
|
|
if (ev->event_get_fd == NULL) SEGFAULT();
|
|
|
|
|
|
|
|
|
|
return ev->event_get_fd(ev, ndx);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fdevent_handler fdevent_get_handler(fdevents *ev, int fd) {
|
|
|
|
|
if (ev->fdarray[fd] == NULL) SEGFAULT();
|
|
|
|
|
if ((uintptr_t)ev->fdarray[fd] & 0x3) return NULL;
|
|
|
|
@ -610,10 +598,19 @@ int fdevent_accept_listenfd(int listenfd, struct sockaddr *addr, size_t *addrlen
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int fdevent_event_next_fdndx(fdevents *ev, int ndx) {
|
|
|
|
|
if (ev->event_next_fdndx) return ev->event_next_fdndx(ev, ndx);
|
|
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
|
void fdevent_process(server *srv, fdevents *ev, int n) {
|
|
|
|
|
/* n is the number of events */
|
|
|
|
|
int ndx = -1;
|
|
|
|
|
do {
|
|
|
|
|
ndx = ev->event_next_fdndx(ev, ndx);
|
|
|
|
|
/* not all fdevent handlers know how many fds got an event */
|
|
|
|
|
if (-1 == ndx) return;
|
|
|
|
|
else {
|
|
|
|
|
fdnode *fdn = ev->fdarray[ev->event_get_fd(ev, ndx)];
|
|
|
|
|
if (0 == ((uintptr_t)fdn & 0x3))
|
|
|
|
|
(*fdn->handler)(srv, fdn->ctx, ev->event_get_revent(ev, ndx));
|
|
|
|
|
}
|
|
|
|
|
} while (--n > 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|