aboutsummaryrefslogtreecommitdiff
path: root/src/evloop.c
diff options
context:
space:
mode:
authorGuangxiong Lin <[email protected]>2022-12-17 09:33:30 +0800
committerGuangxiong Lin <[email protected]>2022-12-17 20:51:37 +0800
commit7bb3515bc303a2a35fe859bcdba2795fbe06643d (patch)
tree453d9cc321bc561ae8bae911308925d61dccb2f7 /src/evloop.c
parent1def149b9245563a8ba1db9e937d537da8de8d27 (diff)
downloadtinyserver-7bb3515bc303a2a35fe859bcdba2795fbe06643d.tar.gz
tinyserver-7bb3515bc303a2a35fe859bcdba2795fbe06643d.tar.bz2
tinyserver-7bb3515bc303a2a35fe859bcdba2795fbe06643d.zip
Make server as a library
Diffstat (limited to 'src/evloop.c')
-rw-r--r--src/evloop.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/evloop.c b/src/evloop.c
index 5bed1e9..5002b24 100644
--- a/src/evloop.c
+++ b/src/evloop.c
@@ -1,5 +1,6 @@
#include <stdlib.h>
#include <sys/epoll.h>
+#include <unistd.h>
#include "evloop.h"
#include "util.h"
@@ -25,6 +26,12 @@ evloop_t *evloop_create()
return eventLoop;
}
+void evloop_destroy(evloop_t *evloop)
+{
+ close(evloop->epollfd);
+ free(evloop);
+}
+
int evloop_wait(evloop_t *el, int timeout)
{
return epoll_wait(el->epollfd, el->events, el->size, timeout);
@@ -56,9 +63,8 @@ void evloop_loop(evloop_t *el)
for (int i = 0; i < nevents; i++) {
ev = evloop_get(el, i);
- // TODO: detect if there is any issue of the handle function
- // and delete the event when issues happen
- tpool_add_work(tpool, ev->process, ev->data);
+ if (ev->process(ev->data) == -1)
+ evloop_remove(el, ev);
}
}
}