Bee*_*and 7 c sockets libevent
据我所知,为了使用libevent监视套接字, event_set()首先应该使用正确的参数调用.
libevent文档声明eventevent_set()的参数可以是EV_READ或EV_WRITE.并且此事件参数是要注意的事件.
但是EV_READ和EV_WRITE对应的套接字事件是什么?我的意思是我如何监视连接状态的变化,而不是监视传入的消息?
我发现这个网站在 libevent 文档方面非常出色。在处理事件的页面上,有一个关于不同事件标志实际含义的很好的概述。从该链接:
EV_READ:此标志指示当提供的文件描述符准备好读取时变为活动状态的事件。
EV_WRITE:此标志指示当提供的文件描述符准备好写入时变为活动状态的事件。
EV_SIGNAL:用于实现信号检测。
EV_PERSIST:表示事件是持久的。
EV_ET:如果底层 event_base 后端支持边缘触发事件,则表示事件应该是边缘触发的。这会影响 EV_READ 和 EV_WRITE 的语义。
因此,明确回答您的问题: EV_READ 对应于可以从套接字或 bufferevent 读取数据,据我所知,它们是 libevent 套接字的等效项。EV_WRITE 对应于套接字/缓冲区事件已准备好将数据写入其中。您可以设置读/写回调来实际执行数据读取和写入,参数cb为
struct event *event_new(struct event_base *base, evutil_socket_t fd,
short what, event_callback_fn cb, void *arg);
不过,如果您使用 libevent 进行套接字 IO,您可能真的需要考虑使用缓冲区事件- 它们是我在我的项目之一 snot_mon 中使用的,您可以在 github 上查看。