1.Libevent相关函数说明
1.1.evconnlistener_new_bind
函数功能:分配一个监听器对象,监听给定地址上的TCP连接
函数原型:
EVENT2_EXPORT_SYMBOL
struct evconnlistener *evconnlistener_new_bind(struct event_base *base,
evconnlistener_cb cb, void *ptr, unsigned flags, int backlog,
const struct sockaddr *sa, int socklen);
参数说明:
@param base 关联的libevent框架上下文.
@param cb 当新连接到来时,进行回调的函数.如果函数为NULL,监听器按被禁用运行,知道函数被设置为非NULL值.
@param ptr 提供给回调函数的参数指针,(一般传递base,以便监听回调中使用)
@param flags 任意LEV_OPT_*的标识,一般服务器设置
LEV_OPT_REUSEABLE:端口复用
LEV_OPT_CLOSE_ON_FREE:释放资源的时候自动关闭
@param backlog 类似于listen函数的backlog参数,设置为-1则使用默认设置.
@param addr 监听器监听地址.
@param socklen 监听器监听地址的字节长度.
备注:这个函数相当于完成系统调用socket()、bind()、listen(),并设置accept回调函数
1.2.evconnlistener_cb监听回调函数原型
函数功能:当监听器监听到一个新连接的时候进行回调(应该是socket的accept成功返回有效的socket描述符后,进行回调,其中fd对应accept返回的文件描述符值).
函数原型:
typedef void (*evconnlistener_cb)(struct evconnlistener *listener, evutil_socket_t fd,
struct sockaddr *sa, int socklen, void *user_data);
参数说明:
@param listener 事件监听器
@param fd 新的文件描述符,相当于服务器创建的与客户端通信的socket描述符
@param addr 客户端地址
@param socklen 客户端地址字节数
@param user_arg evconnlistener_new()中传入的自定义参数
1.3.event_new
函数功能:在被添加到上下文对象前.创建指定一个事件
函数原型:struct event *
event_new(struct event_base *base, evutil_socket_t fd, short events, void (*cb)(evutil_socket_t, short, void *), void *arg)
返回:
返回一个事件,其能后续被event_add() and event_del()添加和删除操作. 如果发生错误,返回NULL。
描述:
如果事件包含 EV_READ, EV_WRITE, or EV_READ|EV_WRITE其中的一种,那么fd是文件描述符或socket描述符 如果事件包含EV_SIGNAL,那么fd是一个信号数值 如果事件不包含以上任意一种标识,那么事件只能被超时或则手动调用event_active()进行触发,这种情况下fd需设置为-1.
EV_PERSIST标识使event_add() 持续的,直到 event_del()被调用。否则只触发一次结束。通常EV_READ | EV_PERSIST, EV_WRITE | EV_PERSIST,
EV_ET标识兼容EV_READ和EV_WRITE, 它告诉libevent框架使用边沿触发事件
EV_TIMEOUT标识在此没有效果
相同的fds可以进行多种事件的监听,但是需要相同的触发模式。
当事件被激活时, 事件循环会调用回调函数,回调函数会传入3个参数.
第一个为fd.
第二个参数为触发事件的位域 EV_READ, EV_WRITE, or EV_SIGNAL. EV_TIMEOUT 标识指示超时事件
EV_ET指示边沿事件触发.
第三个参数自定义的回调函数参数指针
参数描述:
@param base 事件附加到的libevent框架上下文
@param fd 被监控的文件描述符或则信号
@param events 需要被监控的事件,通过位定义: EV_READ, EV_WRITE,EV_SIGNAL, EV_PERSIST, EV_ET.
@param callback 事件发生时,需要调用的函数,即回调函数
@param callback_arg 调用回调函数时,传入的自定义参数
相关联的其他函数为:event_free(), event_add(), event_del(), event_assign()
1.4.event_add
函数功能:在需等待事件集中添加一个事件.
函数原型:
EVENT2_EXPORT_SYMBOL
int event_add(struct event *ev, const struct timeval *timeout);
函数描述:
当event_assign()或