io event on linux

This commit is contained in:
fengzero
2022-02-09 17:43:22 +08:00
committed by Parker Liu
parent 9074364d59
commit 0ab8f6534a
2 changed files with 45 additions and 6 deletions
-1
View File
@@ -54,7 +54,6 @@ typedef int (*neu_event_io_callback)(enum neu_event_io_type type, int fd,
void *usr_data);
typedef struct neu_event_io {
int type;
int fd;
void * usr_data;
neu_event_io_callback cb;
+45 -5
View File
@@ -37,6 +37,8 @@ struct neu_event_timer_ctx {
};
struct neu_event_io_ctx {
int fd;
void *event_data;
};
struct event_data {
@@ -235,15 +237,53 @@ int neu_event_del_timer(neu_event_ctx_t *events, neu_event_timer_ctx_t *timer)
neu_event_io_ctx_t *neu_event_add_io(neu_event_ctx_t *events, neu_event_io_t io)
{
(void) events;
(void) io;
return NULL;
int ret = 0;
neu_event_io_ctx_t *io_ctx = calloc(1, sizeof(neu_event_io_ctx_t));
struct event_data * data = calloc(1, sizeof(struct event_data));
struct epoll_event event = { .events = EPOLLIN, .data.ptr = data };
data->type = IO;
data->fd = io.fd;
data->usr_data = io.usr_data;
data->callback.io = io.cb;
data->ctx.io = io_ctx;
io_ctx->fd = io.fd;
io_ctx->event_data = data;
pthread_mutex_lock(&events->mtx);
TAILQ_INSERT_TAIL(&events->datas, data, node);
pthread_mutex_unlock(&events->mtx);
ret = epoll_ctl(events->epoll_fd, EPOLL_CTL_ADD, io.fd, &event);
log_info("add io, fd: %d, epoll: %d, ret: %d", io.fd, events->epoll_fd,
ret);
return io_ctx;
}
int neu_event_del_io(neu_event_ctx_t *events, neu_event_io_ctx_t *io)
{
(void) events;
(void) io;
struct event_data *data = NULL;
log_info("del io: %d from epoll: %d", io->fd, events->epoll_fd);
epoll_ctl(events->epoll_fd, EPOLL_CTL_DEL, io->fd, NULL);
pthread_mutex_lock(&events->mtx);
TAILQ_FOREACH(data, &events->datas, node)
{
if (data->fd == io->fd) {
TAILQ_REMOVE(&events->datas, data, node);
free(io->event_data);
free(io);
break;
}
}
pthread_mutex_unlock(&events->mtx);
return 0;
}