1、 struct event_base *event_base_new(void);初使化一个event base对象。
2、 void event_base_free(struct event_base *base);释放一个event base对象
3、 int event_reinit(struct event_base *base);重新初使化一个已经存在的eventbase对象
4、 int event_base_loop(struct event_base *base, int flags);
此函数是循环的监控在base中注册的事件,直到没有注册的事件。
Flags包含两个值,为EVLOOP_ONCE时,等待事件的发生然后执行所有的事件,结束,只执行一次;EVLOOP_NONBLOCK时,只检查当前有没有活动的事件然后执行他们。
5、 int event_base_dispatch(struct event_base *base);这个函数与event_base_loop没有设置flag时的功能相同。
6、 int event_base_loopexit(struct event_base *base, const structtimeval *tv);退出循环,等待tv个时间后退出,如果tv为NULL则没有延迟,并且将所有的活动的事件都执行完之后才退出,如果当前没有event loop则对下次的eventloop有效。
7、 int event_base_loopbreak(struct event_base *base);退出循环,不等待活动事件执行完,直接退出,如果当前没有eventloop,函数不起任何的作用。
8、 int event_base_gettimeofday_cached(struct event_base *base,structtimeval *tv_out);获得当前正在执行的callback函数执行的时间,如果没有正在执行的函数,则返回当前时间。
9、 void event_base_dump_events(struct event_base *base, FILE *f);列出f在base中注册的所有的事件即状态。
10、 libevent可以监听的事件有
1) 对一个文件描述符的读或写
2) 对一个文件描述符正变成读或写(只针对边缘触发的IO)
3) 时间超时
4) 一个信号发生
5) 用户触发事件
11、 事件对应的接口为:
#defineEV_TIMEOUT 0x01
#defineEV_READ 0x02
#defineEV_WRITE 0x04
#defineEV_SIGNAL 0x08
#defineEV_PERSIST 0x10
#defineEV_ET 0x20
12、 回调函数的接口:typedef void (*event_callback_fn)(evutil_socket_t, short, void *);第一个参数为事件发生在那个文件描述符上,第二个参数描述了具体那个事件,第三个参数是用户传进来的参数。
13、 struct event *event_new(structevent_base *base, evutil_socket_t fd, short what, event_callback_fn cb, void*arg);初使化一个event,使其指定到一个base,fd为监听的描述符,what是对那些事件进行监听,回调函数有回调函数的参数
14、 int event_add(struct event *ev,const struct timeval *tv);这个函数是将event pending到base上,只有经过pending的event才会被监控,如果enent初使化为EV_PERSIST则pending永远有效,否则callback func被调用后就失效了,要想再生效则需要重新pending,如果设置了tv,则过去tv个时间后将触发超时事件。
15、 int event_del(struct event*ev);可以将已经pending的enent删除
16、 int event_assign(struct event*event, struct event_base *base, evutil_socket_t fd, short what, void(*callback)(evutil_socket_t, short, void *), void *arg);为了消除版本的差异实现这个函数,所有的都跟event_new一样,只是多了一个event参数,并且要求event没有被初使化过。
17、 int event_priority_set(structevent *event, int priority);可以改变event的优先级,改变回调函数的执行顺序,priority值的范围为从0到base的priority的值减1,值越小越优先。当有多个priority被设置时,先运行有高优先级的事件,运行完成后再检查有没有高优先级的事件,如果没有才运行低优先级的事件。通过event_base_priority_init(base, 2);设置base的优先级。
18、evutil_socket_t,大部分的操作系统上socket为一个int型,而在windows中为SOCKET类型,为了系统兼容我们定义了此类型如下:
#ifdefWIN32
#defineevutil_socket_t intptr_t
#else
#defineevutil_socket_t int
#endif