文章目录
article
事件接口
AI文章摘要
qwen-turbo-latest
加载中...
1. event简介
2. event2/event
2.1 数据结构
2.2 函数
//框架
struct event_base* event_base_new(void)申请事件处理框架
void event_reinit()重新初始化, 在子进程中, 必须重新初始化
int event_base_dispath(struct event_base* base)事件循环
int event_base_loopexit(struct event_base* base, const struct timeval* tv)等待正在处理的事件处理完毕后退出监听, 可以设置延迟触发
int event_base_loopbreak(struct event_base* base)强制退出监听.
void event_base_free(struct event_base* base); 释放事件处理框架
//事件
struct event* event_new(struct event_base* base, evutil_socket_t fd, short what, event_callback_fn cb, void* arg) 创建新事件
int event_add(struct event*ev, const struct timeval* tv) 事件提交, 可设置超时自动触发
int event_del(struct event* ev)事件挂起
void event_free(struct event* event)删除事件
- base: 事件处理框架
- fd: 文件描述符
- what:
- EV_READ 读
- EV_WRITE 写
- EV_SIGNAL 信号
- EV_PERSIST 持续触发. 框架默认只处理一次该事件, 处理完后自动del. 若设置该选线则持续处理.
- EV_ET 边沿模式
- cb: 回调函数typedef void(*event_callback_t)(evutil_socket_t, short, void*)
- arg: 回调参数
3. event2/bufferevent
3.1 数据结构
3.2 函数
bufferevent是libevent为IO缓冲操作提供的一种通用机制, 由一个底层的传输接口以及一个读缓冲区和一个写缓冲区组成, 与event不同的是bufferevent在读取或写入足够多的数据后才调用用户回调.
在套接字通信中, 不是用event, 而是用evconnlistener以及bufferevent. evconnlistener负责封装用于监听的套接字, bufferevent用于封装与客户端通信的套接字.
struct evconnlistener* evconnlistener_new(struct event_base* base, evconnlistener_cb cb, void* cbarg, unsigned flag, int backlog, evutil_socket_t fd)
struct evconnlistener* evconnlistener_bind(struct event_base* base, evconnlistener_cb cb, void* cbarg, unsigned flag, int backlog, const struct sockaddr* sa, int socklen)类似evconnlistener_new, 内部创建监听套接字
- base: 事件处理框架
- cb: typedef void(*evconnlistener_cb)(struct* evconnlistener, evutil_socket_t, struct sockaddr*, int len, void* arg), 当有连接请求时调用
- cbarg: 回调函数
- flag:
- LEV_OPT_CLOSE_ON_FREE 关闭时释放套接字
- LEV_OPT_REUSEABLE端口复用
- backlog: 最大同时连接数, -1表示默认的最大连接数128
- evutil_socket_t: 监听套接字
void evconnlistener_free(struct evconnlistener* evl)释放监听器
struct bufferevent* bufferevent_socket_new(struct event_base* base, evutil_socket_t fd , enum bufferevent_options options)
- options:
void bufferevent_setcb(struct bufferevent* bev, bufferevent_data_cb readcb, bufferevent_data_cb writecb, bufferevent_data_cb eventcb, void* cbarg)
void bufferevent_enable(struct bufferevent* bev, short what)启用缓冲区
void bufferevent_disable(struct bufferevent* bev, short what)禁用缓冲区
int bufferevent_write(struct bufferevent* bev, const void* buff, size_t size)
size_t bufferevent_read(struct bufferevent* bev, void* buff, size_t size)
void bufferevent_free(struct bufferevent* bev)释放事件