about summary refs log tree commit diff
path: root/evloop/evloop.h
diff options
context:
space:
mode:
Diffstat (limited to 'evloop/evloop.h')
-rw-r--r--evloop/evloop.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/evloop/evloop.h b/evloop/evloop.h
new file mode 100644
index 0000000..97f7665
--- /dev/null
+++ b/evloop/evloop.h
@@ -0,0 +1,57 @@
+#ifndef BTPD_EVLOOP_H
+#define BTPD_EVLOOP_H
+
+#include <sys/time.h>
+#include <stdint.h>
+
+#include "timeheap.h"
+
+#define EV_READ    1
+#define EV_WRITE   2
+#define EV_TIMEOUT 3
+
+typedef void (*evloop_cb_t)(int fd, short type, void *arg);
+
+#if defined(EVLOOP_EPOLL) || defined(EVLOOP_KQUEUE)
+
+struct fdev {
+    evloop_cb_t cb;
+    void *arg;
+    int fd;
+    uint16_t flags;
+    int16_t index;
+};
+
+#elif defined(EVLOOP_POLL)
+
+struct fdev {
+    int i;
+};
+
+#else
+#error No evloop method defined.
+#endif
+
+struct timeout {
+    evloop_cb_t cb;
+    void *arg;
+    struct th_handle th;
+};
+
+int evloop_init(void);
+int evloop(void);
+
+int fdev_new(struct fdev *ev, int fd, uint16_t flags, evloop_cb_t cb,
+    void *arg);
+int fdev_del(struct fdev *ev);
+int fdev_enable(struct fdev *ev, uint16_t flags);
+int fdev_disable(struct fdev *ev, uint16_t flags);
+
+void timer_init(struct timeout *, evloop_cb_t, void *);
+int timer_add(struct timeout *, struct timespec *);
+void timer_del(struct timeout *);
+
+void timers_run(void);
+struct timespec timer_delay(void);
+
+#endif