一次典型应用的函数调用
struct event ev;
struct event_base *base;
struct event_base *base = event_base_new();
event_set(&ev, fd, EV_READ|EV_PERSIST, callback_fn, (void *)arg);
|
|__> event_assign(ev, current_base, fd, events, callback, arg)
|
|____> ev->ev_base = base;
ev->ev_callback = callback;
ev->ev_arg = arg;
ev->ev_fd = fd;
event_base_dispatch(base);
|
|__>event_base_loop(base,0)
|
|__> res = evsel->dispatch(base, tv_p);
| |
| |_____>epoll_wait
|
|__>event_process_active (base)
|
|__>event_process_active_single_queue
|
|__>
evcb_callback =*ev->ev_callback;
evcb_callback(ev->ev_fd, res, ev->ev_arg);
|
|___> accept
本文深入解析Libevent库的典型应用,展示如何通过该库实现事件驱动的网络编程。从创建事件基座到设置事件监听,再到事件循环的调度与执行,逐步剖析其内部机制。特别聚焦于epoll_wait系统调用在事件驱动模型中的关键作用。

4212

被折叠的 条评论
为什么被折叠?



