C++ Libevent 高级事件bufferevent

bufferevent 相比于 event 比较高级的事件

bufferevent有 三个事件

  • 当数据从底层的缓冲区 拷贝到应用层缓冲区,触发读回调(事件)
  • 当应用层缓冲区写入到底层缓冲区,触发写回调
  • 当你的连接 连接与断开,会触发事件回调

总结

  • 1个文件描述符
  • 2个缓冲区(应用层)
  • 3个事件回调

普通event

  • 0个缓冲区
  • 1个回调, 不管读写,触发的都是一个回调函数

buffevent 常用的 api

在这里插入图片描述

1.bufferevent_socket_new

struct bufferevent *bufferevent_socket_new(
	struct event_base *base,
    evutil_socket fd,
    int options
);

bufferevent_socket_new 对已经存在的socekt 创建bufferevent事件,可用于后面讲到的链接监听器中的回调函数中

  • base 根节点
  • fd 文件描述符
  • options bufferevent选项
    • BEV_OPT_CLOSE_ON_FREE 释放bufferevent时候,自动关闭底层接口
    • BEV_OPT_THREADSAFE 线程安全

2.bufferevent_socket_connect

int bufferevent_socket_connect(struct bufferevent *bev, struct sockaddr *serv, int socklen);

客户端使用

封装了底层socket和connect接口,将bufferevent和通信的socket进行绑定

  • bev 提前初始化好的bufferevent事件
  • serv 对端(服务端)的ip端口号和协议的结构指针
  • socklen 描述serv的长度

3.viod bufferevent_free

viod bufferevent_free(struct bufferevent *bufev);

释放节点,事件

4.上树并且设置回调

void bufferevent_setcb(
	struct bufferevent *bufev,
    bufferevent_data_cb readcb,
    bufferevent_data_cb writecb,
    bufferevent_data_cb eventcb,
    void *cbarg
)

回调函数的原型

typedef void (*bufferevent_data_cb)(struct bufferevent *bev,void *ctx);
typedef void (*bufferevent_event_cb)(struct bufferevent *bev,short what,void *ctx);
# what
# BEV_EVENT_EOF
# BEV_EVENT_ERROR
# BEV_EVENT_TIMEOUT
# BEV_EVENT_CONNECTED

5.将数据写入到bufferevent的缓冲区

int bufferevent_write(struct bufferevent *bufev ,const void *data,size_t size)

6.写的另外一种方法,

int bufferevent_write_buffer(struct bufferevent *bufev,struct evbuffer *buf);

7.读

size_t bufferevent_read(struct bufferevent *bufev,viod *data,size_t size);

8.读

int bufferevent_read_buffer(struct bufferevent *bufev, struct evbuffer *buf);

9.设置事件生效

int bufferevent_enable(struct bufferevent *bufev,short event);

10.设置事件不生效

int bufferevent_disable(struct bufferevent *bufev,short event);
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页