我理解为了使用libevent监视套接字,首先应使用正确的参数调用event_set()
。
libevent文档指出event_set()的event
参数可以是EV_READ或EV_WRITE。并且此事件参数是要注意的事件。
但是EV_READ和EV_WRITE对应的套接字事件是什么?我的意思是我如何监视连接状态的变化,而不是监视传入的消息?
答案 0 :(得分:3)
我发现this site在libevent的文档方面非常出色。在the page dealing with events上,可以很好地概述不同事件标志的实际含义。从那个链接:
EV_READ :此标志表示在何时变为活动状态的事件 提供的文件描述符已准备好阅读。
EV_WRITE :此标志表示活动的事件 当提供的文件描述符准备好写入时。
EV_SIGNAL :用于实现信号检测。
EV_PERSIST :表示该事件是持久性的。
EV_ET :表示该事件应该是边缘触发的,如果 底层event_base后端支持边缘触发事件。 这会影响EV_READ和EV_WRITE的语义。
所以要明确地回答你的问题:EV_READ对应于可以从套接字或bufferevent读取数据,据我所知,它们是libevent socket等价物。 EV_WRITE对应于socket / bufferevent准备将数据写入其中。您可以设置读/写回调以实际使用cb
参数进行数据读取和写入
struct event *event_new(struct event_base *base, evutil_socket_t fd,
short what, event_callback_fn cb, void *arg);
如果你正在使用libevent进行套接字IO,你可能真的想考虑使用buffer events - 它们就是我在我的一个项目中使用的,snot_mon,which you can check out over on github。