51 lines
1004 B
C
51 lines
1004 B
C
|
|
#include <stdlib.h>
|
|
|
|
#include <ev.h>
|
|
|
|
#define UNUSED(x) ((void)(x))
|
|
|
|
#define IOEV_NONE 0
|
|
#define IOEV_READ 1
|
|
#define IOEV_WRITE 2
|
|
#define IOEV_TIMEOUT 4
|
|
#define IOEV_ERROR 128
|
|
|
|
void ioev_event_callback(void* watcher, int revents);
|
|
|
|
struct ev_loop *ioev_ev_default_loop (unsigned int flags) {
|
|
return ev_default_loop(flags);
|
|
}
|
|
|
|
static void io_cb(struct ev_loop *loop, ev_io *w, int revents) {
|
|
int ev = 0;
|
|
UNUSED(loop);
|
|
|
|
if (revents & EV_READ) ev = ev | IOEV_READ;
|
|
if (revents & EV_WRITE) ev = ev | IOEV_WRITE;
|
|
if (revents & EV_ERROR) ev = ev | IOEV_ERROR;
|
|
|
|
ioev_event_callback(w->data, ev);
|
|
}
|
|
|
|
ev_io* ioev_io_watcher_new(void *watcher) {
|
|
ev_io *w = malloc(sizeof(ev_io));
|
|
ev_io_init(w, io_cb, -1, 0);
|
|
w->data = watcher;
|
|
|
|
return w;
|
|
}
|
|
|
|
void ioev_io_watcher_free(ev_io *w) {
|
|
free(w);
|
|
}
|
|
|
|
void ioev_io_set(ev_io *w, int fd, int ev) {
|
|
int events = 0;
|
|
|
|
if (ev & IOEV_READ) events = events | EV_READ;
|
|
if (ev & IOEV_WRITE) events = events | EV_WRITE;
|
|
|
|
ev_io_set(w, fd, events);
|
|
}
|