![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
libevent的一个event可以绑定多个socket吗
1个回答
展开全部
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用于处理一些错误信息。
[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用于处理一些错误信息。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询