about summary refs log tree commit diff
path: root/evloop/evloop.h
diff options
context:
space:
mode:
authorRichard Nyberg <rnyberg@murmeldjur.se>2009-01-09 18:26:23 +0100
committerRichard Nyberg <rnyberg@murmeldjur.se>2009-01-11 15:26:46 +0100
commit59905999ce145a81e0003766d468945c2444a90e (patch)
treeb4b2f566942c2a4b90ab7a6d6111c73c49e4afc5 /evloop/evloop.h
parent4457c1268a923d2a662ab23ca1b8d7920811ae51 (diff)
downloadbtpd-59905999ce145a81e0003766d468945c2444a90e.tar.gz
btpd-59905999ce145a81e0003766d468945c2444a90e.zip
Add evloop, btpd's new event loop. This will replace libevent.
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