libevent应用event来封装网络事件回调,参数、fd。。。等一些信息,函数很简略
void
event_set(struct event *ev, int fd, short events,
void (*callback)(int, short, void *), void *arg)
{
/* Take the current base - caller needs to set the real base later */
ev->ev_base = current_base; //设置成默许的current_base,如果
ev->ev_callback = callback; //设置事件回调callback;
ev->ev_arg = arg; //设置参数
ev->ev_fd = fd; //设置句柄
ev->ev_events = events; //设置当前的事件
/*
* EV_TIMEOUT 0x01
* EV_READ 0x02
* EV_WRITE 0x04
* EV_SIGNAL 0x08
* EV_PERSIST 0x10
*/
ev->ev_res = 0; //记载当前激活事件的类型
ev->ev_flags = EVLIST_INIT; //设置事件标志,用于表现当前的事件处于甚么阶段
/*
* EVLIST_TIMEOUT 0x01 //代表event在time堆中
* EVLIST_INSERTED 0x02 //代表event在已注册时光链表中
* EVLIST_SIGNAL 0x04 //未见应用
* EVLIST_ACTIVE 0x08 //代表event在激活链表中
* EVLIST_INTERNAL 0x10 //内部应用标志
* EVLIST_INIT 0x80 //代表event已被初始化
*/
ev->ev_ncalls = 0; //代表callback被履行多少次
ev->ev_pncalls = NULL; //指向ev_ncallsor指向NULL
min_heap_elem_init(ev); //初始化时光堆中的索引值
/* by default, we put new events into the middle priority */
if(current_base)
ev->ev_pri = current_base->nactivequeues/2;//设置事件的权限为中间权限为默许值
}void