簡體   English   中英

libevent 和非阻塞 sockets

[英]libevent and non-blocking sockets

我知道為了使用 libevent 監視套接字,應該首先使用正確的參數調用event_set()

libevent 文檔指出 event_set() 的event參數可以是 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 上查看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM