我會保持簡短。如何以阻塞方式直接將等待在bufferevent
輸出緩衝區中的數據直接清除到套接字。Libevent bufferevent socket flush
在進行異步寫入(使用evbuffer_add
)後關閉我的套接字包裝類後,libevent吐出epoll
錯誤,表示嘗試寫入無效的fd。我需要能夠將flushvent數據刷新到套接字,有什麼建議嗎?
注意:具體的錯誤是Epoll MOD(4)在fd 9上失敗。舊事件是6;讀取更改爲2(del);寫更改爲0(無):錯誤的文件描述符。
的問題是,libevent的實際上不寫的所有數據到插座,數據留在libevents內部緩衝區中,並且截至目前,當數據仍在緩衝區中等待時關閉套接字。我想將libevent緩衝區刷入套接字然後關閉它。禁用套接字延遲不起作用。 – Dylan
我不認爲'bufferevent_flush'還可以與網絡套接字一起工作,但是你試過了嗎? – 2013-08-18 12:16:19
如果'bufferevent_flush()'不起作用,那麼我會在創建bufferevent時嘗試設置'BEV_OPT_CLOSE_ON_FREE'標誌。另外,bufferevents是內部引用計數的,所以如果bufferevent在釋放時有待處理的延遲迴調,那麼在回調完成之前它不會被刪除。 – 2013-08-18 12:22:40