libevent和非阻塞套接字

7

我了解想要使用libevent监控套接字,需要首先调用event_set()并传入正确的参数。

libevent文档指出event参数可以是EV_READ或EV_WRITE。而且此事件参数是要被监视的事件。

但是EV_READ和EV_WRITE对应哪些套接字事件呢?也就是说,如何监测连接状态的变化和传入消息的变化呢?


2
如果我没记错的话:如果一个连接被关闭,你会得到一个正常的读/写事件,当你尝试读/写时,你会得到零字节的读/写。当你写入时,你可能也会收到一个SIGPIPE信号。这是你的指示,表明连接已被另一端关闭。 - n. m.
1个回答

4
我发现这个网站在libevent文档方面非常出色。在处理事件的页面上,有一个很好的概述,介绍了不同事件标志的实际含义。从该链接中可以看到:
  • EV_READ :此标志表示当提供的文件描述符准备好读取时,事件变为活动状态。

  • EV_WRITE :此标志表示当提供的文件描述符准备好写入时,事件变为活动状态。

  • EV_SIGNAL :用于实现信号检测。

  • EV_PERSIST :表示事件是持久性的。

  • EV_ET :表示如果底层的event_base后端支持边缘触发事件,则应将事件设置为边缘触发。这会影响EV_READ和EV_WRITE的语义。

因此,明确回答您的问题:EV_READ对应于从套接字或bufferevent(据我所知,它们是libevent套接字的等效物)中有可读数据。 EV_WRITE对应于准备好向套接字/ bufferevent写入数据。您可以使用cb参数设置读取/写入回调来实际执行数据读取和写入。
如果您正在使用libevent进行套接字IO,则可能确实希望考虑使用缓冲区事件-这是我在我的一个项目snot_mon中使用的您可以在github上查看该项目

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接