






















libevent 的 evbuffer 实现了为向后面添加数据和从前面移除数据而优化的字节队列。
struct evbuffer *evbuffer_new(void); // 分配和返回一个新的空 evbuffer
void evbuffer_free(struct evbuffer *buf); // 释放 evbuffer 和其内容。
evconnlistener_new() 函数的 flags 参数传入一些标志
/* 链接监听器回调 */
typedef void (*evconnlistener_cb)(struct evconnlistener *listener,
evutil_socket_t sock, struct sockaddr *addr, int len, void *ptr);
/* 假定已经将套接字绑定到要监听的端口,然后通过 fd 传入这个套接字 */
struct evconnlistener *evconnlistener_new(struct event_base *base,
evconnlistener_cb cb, // 新连接到达时,监听 器调用你给出的回调函数。
void *ptr, // ptr 指针将传递给回调函数。
unsigned flags, // 参数控制回调函数的行为,下面会更详细论述。
int backlog, // 最大未决连接数。
evutil_socket_t fd);
/* 分配和绑定套接字, 传输要绑定到的地址和地址长度 */
struct evconnlistener *evconnlistener_new_bind(struct event_base *base,
evconnlistener_cb cb, // 新连接到达时,监听 器调用你给出的回调函数。
void *ptr, // ptr 指针将传递给回调函数。
unsigned flags, flags // 参数控制回调函数的行为,下面会更详细论述。
int backlog, // 最大未决连接数。
const struct sockaddr *sa,
int socklen);
void evconnlistener_free(struct evconnlistener *lev);
int evbuffer_enable_locking(struct evbuffer *buf, void *lock);
void evbuffer_lock(struct evbuffer *buf);
void evbuffer_unlock(struct evbuffer *buf);
int evconnlistener_disable(struct evconnlistener *lev);
int evconnlistener_enable(struct evconnlistener *lev);
void evconnlistener_set_cb(struct evconnlistener *lev, evconnlistener_cb cb, void *arg);
/* 这个函数返回 evbuffer 存储的字节数 */
size_t evbuffer_get_length(const struct evbuffer *buf);
/* 返回连续地存储在 evbuffer前面的字节数(evbuffer中的数据可能存储在多个分隔开的内存块中) */
size_t evbuffer_get_contiguous_space(const struct evbuffer *buf);
/*返回监听器关联的套接字*/
evutil_socket_t evconnlistener_get_fd(struct evconnlistener *lev);
/*返回event_base*/
struct event_base *evconnlistener_get_base(struct evconnlistener *lev);
/* 这个函数添加 data 处的 datalen 字节到 buf 的末尾,成功时返回0,失败时返回-1*/
int evbuffer_add(struct evbuffer *buf, const void *data, size_t datlen);
/* 这些函数添加格式化的数据到 buf 末尾 */
int evbuffer_add_printf(struct evbuffer *buf, const char *fmt, ...)
// evbuffer_add(buf, "Hello world 2.0.1", 17);
/* 格式参数和其他参数的处理分别与 C 库函数 printf 和 vprintf 相同。函数返回添加的字节数 */
int evbuffer_add_vprintf(struct evbuffer *buf, const char *fmt, va_list ap);
// evbuffer_add_printf(buf, "Hello %s %d.%d.%d", "world", 2, 0, 1);
/* 这个函数修改缓冲区的最后一块,或者添加一个新的块,使得缓冲区足以容纳 datlen 字节, 而不需要更多的内存分配。*/
int evbuffer_expand(struct evbuffer *buf, size_t datlen);
/* src 中的所有数据移动到 dst 末尾,成功时返回0,失败时返回-1 */
int evbuffer_add_buffer(struct evbuffer *dst, struct evbuffer *src);
/* 从 src 中移动 datlen 长度字节到 dst 末尾,如果字节数小于 datlen,所有字节被移动。函数返回移动的字节数 */
int evbuffer_remove_buffer(struct evbuffer *src,
struct evbuffer *dst,
size_t datlen);
typedef void (*evconnlistener_errorcb)(struct evconnlistener *lis, void *ptr);
/*监听器设置了错误回调函数,则监听器发生错误 时回调函数就会被调用*/
void evconnlistener_set_error_cb(struct evconnlistener *lev,
evconnlistener_errorcb errorcb);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。