03libevent下通信的主要函数
以下是关于libevent学习的相关文章:
01libevent库的下载与安装并且测试是否安装成功
02libevent库的整体框架思想
03libevent下通信的主要函数
04libevent库下fifo作为通信的套接字
05libevent库下未决与非未决的解释
06libevent下通信中bufferevent缓冲区的特性介绍
07libevent库下bufferevent事件的相关函数
08libevent库下通信服务端与客户端的主要函数
09libevent库服务端与客户端的TCP通信流程和代码示例
以下的函数以框架的顺序来说明。
1 主要函数及参数说明
1)创建一个event_base
// 创建event_base
struct event_base* event_base_new(void)
2)创建一个普通event
// 创建新事件
struct event *event_new(
struct event_base *base, //上面创建的base
evutil_socket_t fd, // 绑定到event上的文件描述符 - int **底层是对epollin与epollout的封装**
short what, //对应的监听事件(看下面的宏)
event_callback_fn cb, // 触发该事件后的处理回调函数
void *arg //回调函数的参数
);
// short what
#define EV_TIMEOUT 0x01 // 已淘汰(忽略)
#define EV_READ 0x02
#define EV_WRITE 0x04
#define EV_SIGNAL 0x08 //libevent封装了信号相关的操作 SIGNAL
#define EV_PERSIST 0x10 // 持续触发,结合event_base_dispatch()函数使用,只有设置了该宏,在event_base_dispatch才能持续监听该事件。例如监听读事件,不设置的话只会出发一次读事件。
#define EV_ET 0x20 // 边沿模式
3)添加事件到底座;任何事件都需要添加到base底座,否则该事件是无效的。
这里额外说明以下:event_add()是将:非未决事件 -> 未决事件。即从没有资格发生变成有可能发生,后面将会写一篇关于未决的概念说明。
int event_add(
struct event *ev, //event_new()返回的对象
const struct timeval *tv //时间{s,us},设置后时间,经过该时间后,事件没有被触发,但该事件的回调函数仍会被调用。
//返回值:成功返回0;失败返回-1
);
4)从底座base摘下一个事件,注意不是删除,删除是下面的event_free()。
对应上面的,这里是从未决->非未决。即从有可能变成没可能。
int event_del(struct event *ev);
//成功时函数返回 0,失败时返回-1。
5)事件循环监听函数1。
int event_base_dispatch(struct event_base* base);
// event_base_dispatch(简化版event_base_loop(),等同于没有设置标志的 event_base_loop ( ))
//该函数将一直运行,直到没有已经注册的事件了,或者调用 了event_base_loopbreak()或者 event_base_loopexit()为止
6)事件循环监听函数2。
int event_base_loop(struct event_base *base, int flags);
//正常退出返回0, 失败返回-1
//flages
#define EVLOOP_ONCE 0x01
//事件只会被触发一次,且事件没有被触发, 阻塞等待
#define EVLOOP_NONBLOCK 0x02
//非阻塞,等方式去做事件检测,不关心事件是否被触发了
#define EVLOOP_NO_EXIT_ON_EMPTY 0x04
//没有事件的时候, 也不退出轮询检测
7)事件循环退出函数1。
int event_base_loopexit(
struct event_base *base,
const struct timeval *tv
);
//如果 event_base 当前正在执行激活事件的回调 ,它将在执行完当前正在处理的事件后立即退出,参数2是指定的退出时间。
struct timeval {
long tv_sec;
long tv_usec;
};
//参数struct timeval *tv
8)事件循环退出函数2。
int event_base_loopbreak(struct event_base *base);
//让event_base 立即退出循环
//返回值: 成功 0, 失败 -1
9)删除或者叫销毁一个事件。
void event_free(struct event *ev);
10)销毁事件的大佬base底座。
void event_base_free(struct event_base* base);