永发信息网

libevent的一个event可以绑定多个socket吗

答案:2  悬赏:30  手机版
解决时间 2021-02-19 16:23
libevent的一个event可以绑定多个socket吗
最佳答案
1. 设置sock为非阻塞的
[cpp] view plaincopy
eg: evutil_make_socket_nonblocking(fd);

2. 使用bufferevent_socket_new创建一个structbufferevent *bev,关联该sockfd,托管给event_base
函数原型为:

[cpp] view plaincopy
struct bufferevent * bufferevent_socket_new(struct event_base *base, evutil_socket_t fd, int options)
eg: struct bufferevent *bev;
bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);

3. 设置读写对应的回调函数
函数原型为:

[cpp] view plaincopy
void bufferevent_setcb(struct bufferevent *bufev,
bufferevent_data_cb readcb, bufferevent_data_cb writecb,
bufferevent_event_cb eventcb, void *cbarg)
eg. bufferevent_setcb(bev, readcb, NULL, errorcb, NULL);

4. 启用读写事件,其实是调用了event_add将相应读写事件加入事件监听队列poll。正如文档所说,如果相应事件不置为true,bufferevent是不会读写数据的
函数原型:

[cpp] view plaincopy
int bufferevent_enable(struct bufferevent *bufev, short event)
eg. bufferevent_enable(bev, EV_READ|EV_WRITE);

5. 进入bufferevent_setcb回调函数:
在readcb里面从input中读取数据,处理完毕后填充到output中;
writecb对于服务端程序,只需要readcb就可以了,可以置为NULL;
errorcb用于处理一些错误信息。
全部回答
或许可以。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
在南昌的商场做香奈儿迪奥 或者兰蔻之类的美
成良家电扩音器材这个地址在什么地方,我要处
丰田凯美瑞后备箱盖子原厂多少钱
津津有味的近、反义词快
英文白色怎么写
看到那些做手工制品的人都会在桌子上放一张可
我叫李可欣,我名字的含义是什么
k4618三车箱106号靠窗吗
汽车功放设计-高手请进
如果一架B2从关岛起飞轰炸北京,中国有能力应
因为快递停发未发货退款,买家不肯修改退款原
科学家通过对生物的认真观察和研究,模仿生物
氟利昂是温室气体吗
为什么我用安卓手机连wifi(如CMCC-EDU)网速
我省促进义务教育均衡发展有何重要意义
推荐资讯
一块豆腐切几刀,可分成二十块
vnd.ms-excel.numberformat 导出是不是excel
高通骁龙616VS海思麒麟620
快手怎么才能封号
牛皮岩地址在哪,我要去那里办事
已知向量a=(sinx,cosx),向量b=(sinx,-根号3si
大德同堂大药房地址在什么地方,想过去办事
美之花地址在什么地方,想过去办事
我想知到歌的名 当我接近爱的边缘,每天收到
逗逗网吧在哪里啊,我有事要去这个地方
喀旦能阿亚克地库木我想知道这个在什么地方
原电池正负极怎样判断,为什么我在有的书上看
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?