aboutsummaryrefslogtreecommitdiff
path: root/eventloop.c
diff options
context:
space:
mode:
authorGuangxiong Lin <[email protected]>2022-12-02 12:18:57 +0800
committerGuangxiong Lin <[email protected]>2022-12-02 12:18:57 +0800
commit0457119acb36b89b6f2f4534fe8ad94b19540bbd (patch)
tree865660e935da9a4adc34f17237e7e83364b53fc6 /eventloop.c
parent6ec515e5515fbf529e3610a2c88116278af2a134 (diff)
downloadtinyserver-0457119acb36b89b6f2f4534fe8ad94b19540bbd.tar.gz
tinyserver-0457119acb36b89b6f2f4534fe8ad94b19540bbd.tar.bz2
tinyserver-0457119acb36b89b6f2f4534fe8ad94b19540bbd.zip
Refactor
Diffstat (limited to 'eventloop.c')
-rw-r--r--eventloop.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/eventloop.c b/eventloop.c
index 970a521..ae4377c 100644
--- a/eventloop.c
+++ b/eventloop.c
@@ -3,6 +3,7 @@
#include "eventloop.h"
#include "util.h"
+#include "constant.h"
struct eventLoop *eventLoopNew()
{
@@ -33,8 +34,6 @@ int eventLoopAdd(struct eventLoop *el, struct event *ev, int flag)
epev.events = flag;
epev.data.ptr = ev;
- ev->el = el;
-
return epoll_ctl(el->epollfd, EPOLL_CTL_ADD, ev->fd, &epev);
}
@@ -55,7 +54,8 @@ void eventLoopLoop(struct eventLoop *el)
for (int i = 0; i < nevents; i++) {
ev = eventLoopGet(el, i);
- ev->handle(ev);
+ if (ev->handle(ev->data) == -1)
+ eventLoopDel(el, ev);
}
}
}
@@ -66,9 +66,19 @@ int eventLoopDel(struct eventLoop *el, struct event *ev)
return ERROR;
if (ev->delete)
- ev->delete(ev);
- else
- free(ev);
+ ev->delete(ev->data);
+ free(ev);
return OK;
}
+
+struct event *eventNew(void *data, int fd, void (*handle), void (*delete))
+{
+ struct event *ev = malloc(sizeof(*ev));
+ ev->data = data;
+ ev->handle = handle;
+ ev->fd = fd;
+ ev->delete = delete;
+
+ return ev;
+}