libevent的监听器API

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设置的上下文参数是同一个。

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农心语

您的鼓励是我写作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值