利用bufferevent_socket_connect()建立网络连接

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:49   1051   0

libevent为我们供给了一个很便利的组件bufferevent,可以将底层的通信接口抽象为缓存操纵,可以使我们无须本身再直接处理惩罚 套接口的发送和接管,并在其上供给读、写、事务回调,具体的文档可参考([翻译]libevent参考手册第六章:bufferevent:概念和入门) 是一份官方文档的翻译,然则该文章中没有说清楚bufferevent的触发前提,仅说了凹凸水位触发等景象,我想知道的是bufferevent是程度 触发还是边沿出发的,比如说读事务已触发然则我发明缓冲中没有足够的数据,不读空缓冲中的数据,则下次再次触发读事务是在什么时辰?是类似程度触发,只要 读缓冲区中稀有据就不绝的触发还是鄙人次稀有据参加读缓冲区时触发?

  故只有写代码本身去验证。客户端采取bufferevent连接办事端,注册读和错误事务回调,办事端从终端上每次读取一行数据发往客户端,客户端触发读事务回调后并不读空读缓存,以此查看bufferevent的回调是程度触发还是边沿触发的。

客户端代码client.c


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>

#include <event2/event.h>
#include <event2/bufferevent.h>
#include <event2/buffer.h>

#define SVRADDR "127.0.0.1"
#define PORT 7890

staticvoid buff_input_cb(struct bufferevent *bev, void*ctx) {

printf("***in %s\n", __func__);

printf("len=%d\n", evbuffer_get_length(bufferevent_get_input(bev)));

return;
}

staticvoid buff_ev_cb(struct bufferevent *bev, short events, void*ctx) {

printf("in %s\n", __func__);

if (events & BEV_EVENT_CONNECTED) {
printf("***BEV_EVENT_CONNECTED\n");
} elseif (events & BEV_EVENT_ERROR) {
printf("***BEV_EVENT_ERROR\n");
}
return;
}


int main() {

int sockfd;
struct event_base *p_base;
struct bufferevent *p_event;

struct sockaddr_in addr;;

memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);

if (inet_pton(AF_INET, SVRADDR, &addr.sin_addr) <=0) {
printf("inet_pton");
exit(1);
}

if ((p_base = event_base_new()) == NULL) {
printf("event_base_new ");
return1;
}

if ((p_event = bufferevent_socket_new(p_base, -1, BEV_OPT_CLOSE_ON_FREE)) == NULL) {
printf("bufferevent_socket_new ");
return1;
}

if ((sockfd = bufferevent_socket_connect(p_event, (struct sockaddr *)&addr, sizeof(addr))) <0) {
printf("bufferevent_socket_connect ");
return1;
}

bufferevent_setcb(p_event, buff_input_cb, NULL, buff_ev_cb, p_base);
bufferevent_enable(p_event, EV_READ);

event_base_dispatch(p_base);

return0;
}

转载于:https://www.cnblogs.com/lchb/articles/3650195.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP