目录
1. 监听器
1.1 evconnlistener_new_bind
功能:
创建一个新的监听socket,并bind到对应的地址,支持AF_UNIX。
备注:
实现代码中,会调用evconnlistener_new来使新创建的socket进入到listen状态。
创建的evconnlistener需要通过evconnlistener_free进行释放。
原型:
struct evconnlistener *
evconnlistener_new_bind(struct event_base *base, evconnlistener_cb cb,
void *ptr, unsigned flags, int backlog, const struct sockaddr *sa,
int socklen);
输入参数:
cb:
用来绑定回调函数,该回调函数的原型如下:
typedef void (*evconnlistener_cb)(struct evconnlistener *, evutil_socket_t, struct sockaddr *, int socklen, void *);
flags:
- LEV_OPT_CLOSE_ON_EXEC: exec后子进程关闭句柄,避免句柄继承
- LEV_OPT_REUSEABLE: 地址复用标记
- LEV_OPT_REUSEABLE_PORT:端口复用标记, Linux>=3.9
- LEV_OPT_DEFERRED_ACCEPT:延后accept标记
- LEV_OPT_BIND_IPV6ONLY: 仅绑定ipv6地址
- LEV_OPT_BIND_IPV4_AND_IPV6: 同时绑定ipv4和ipv6地址
- LEV_OPT_CLOSE_ON_FREE: 在调用evconnlistener_free释放evconnlistener结构体的时候自动关闭socket句柄。
backlog: 如果<0,那么使用默认值128。
1.2 evconnlistener_new
功能:
让一个socket进入listen状态,并绑定毁掉处理函数。
备注:
创建的evconnlistener需要通过evconnlistener_free进行释放。
原型:
struct evconnlistener *
evconnlistener_new(struct event_base *base,
evconnlistener_cb cb, void *ptr, unsigned flags, int backlog,
evutil_socket_t fd);
输入参数:
cb: 参考evconnlistener_new_bind
flags: 参考evconnlistener_new_bind。
backlog: 如果<0,那么使用默认值128。
1.3 evconnlistener_free
功能:
释放evconnlistener结构体。
** 原型:**
void
evconnlistener_free(struct evconnlistener *lev);
输入参数:
(略)
1.4 evconnlistener_enable
功能:
使得一个evconnlistener进入启用状态。
备注:
会调用底层的epoll或者其他的io模型来添加accept事件的监听。
原型:
int
evconnlistener_enable(struct evconnlistener *lev);
1.5 evconnlistener_disable
功能:
使得一个evconnlistener进入禁用状态。
备注:
会调用底层的epoll或者其他的io模型来删除accept事件的监听。
原型:
int
evconnlistener_disable(struct evconnlistener *lev);
1.6 evconnlistener_get_base
功能:
通过evconnlistener获取其绑定的event_base的指针。
原型:
struct event_base *
evconnlistener_get_base(struct evconnlistener *lev);
1.7 evconnlistener_get_fd
功能:
通过evconnlistener获取其绑定的socket句柄。
原型:
static evutil_socket_t
event_listener_getfd(struct evconnlistener *lev);
1.8 evconnlistener_set_cb
功能:
重新绑定evconnlistener的回调函数以及回调函数的上下文参数。
原型:
void
evconnlistener_set_cb(struct evconnlistener *lev,
evconnlistener_cb cb, void *arg);
1.9 evconnlistener_set_error_cb
功能:
重新绑定evconnlistener的错误回调函数。
备注:
当accept调用失败的时候,如果不是EINTR和EAGAIN错误,那么是accep错误,这个时候会回调通过本函数设置的错误回调函数。
原型:
void evconnlistener_set_error_cb(struct evconnlistener *lev,
evconnlistener_errorcb errorcb);
输入参数:
errorcb:
该回调函数的原型如下:
typedef void (*evconnlistener_errorcb)(struct evconnlistener *, void *);
回调的时候其上下文参数和通过evconnlistener_set_cb设置的上下文参数是同一个。