libevent的一个event可以绑定多个socket吗
答案:2 悬赏:30 手机版
解决时间 2021-02-19 16:23
- 提问者网友:寂寞梧桐
- 2021-02-19 11:15
libevent的一个event可以绑定多个socket吗
最佳答案
- 五星知识达人网友:风格不统一
- 2021-02-19 12:31
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用于处理一些错误信息。
全部回答
- 1楼网友:北方的南先生
- 2021-02-19 13:58
或许可以。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯