关于libevent:libevent学习使用2

31次阅读

共计 921 个字符,预计需要花费 3 分钟才能阅读完成。

libevent 定时器

libevent 的 time-test.c 形容了一个定时事件的应用。

根本流程和之前的 signal 事件类似:

初始化一个 event base

/* Initialize the event library */
    base = event_base_new();

新建一个事件

应用 event_assign 初始化一个事件,并传入超时解决的处理函数,event_assign 函数最初一个参数是超时处理函数的参数。参数 flagsEV_PERSIST示意该事件每次产生、并解决完后持续监听。如果不设置,此超时事件只解决一次。

/* Initialize one event */
flags = EV_PERSIST;
//...
event_assign(&timeout, base, -1, flags, timeout_cb, (void*) &timeout);

增加事件

应用 struct timeval 设定超时事件,并将该构造传入 event_add 的第二个参数。

evutil_timerclear(&tv);
tv.tv_sec = 2;
event_add(&timeout, &tv);

开始监听处理事件

event_base_dispatch(base);

开释资源

event_free(signal_event);
event_base_free(base);

信号处理函数

回调函数的参数如下:

@param fd An fd or signal 
@param events One or more EV_* flags
@param arg A user-supplied argument.
typedef void (*event_callback_fn)(evutil_socket_t, short, void *);

总结

1、信号事件、定时器事件

这两个流程基本相同,创立 eventbase、创立事件、增加事件、执行 event_base_dispatch。

2、TCP Server 监听事件

应用 evconnlistener_new_bind 函数,该函数蕴含了创立事件,和 TCP 监听流程,须要自定义客户端接入的 socket 处理程序。

3、socket 解决

应用了 bufferevent 解决 socket 收发数据, 须要自定义读写和异样的处理函数。

正文完
 0