03libevent下通信的主要函数

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值