2013-08-19 32 views
1

我正在研究專爲在企業內部網絡中使用而設計的多線程客戶端 - 服務器應用程序。我使用libevent進行異步I/O(幾個線程,每個線程有一個evconnlistener/bufferevent對象)和OpenSSL用於加密。Libevent:獲取已接受連接的列表

現在我需要確定已建立連接的監視機制(例如,如果客戶端關閉或超過某些超時,請檢查服務器端)。而且似乎libevent 2.0.21不提供任何API來獲取活動連接列表。

我準備編寫全局數據結構(例如客戶端IP的列表),但可能存在一種用於此目的的方法,隱藏在libevent API的深處?

非常感謝。

+0

你可以仔細閱讀libevent源代碼,它足夠小。 –

+1

如果客戶端存在斷開連接,Libevent通常會立即超時。客戶端斷開和事件回調之間的時間差異小於一秒。這是我的以下event_cb。 bufferevent_setcb(bev,read_cb,write_cb,event_cb,NULL); 所以我說的是檢查狀態是不必要的。 –

+0

非常感謝!但是確定accept_cb()中接受的套接字(IP和端口)的參數對我來說是必要的。也許我會嘗試重寫幾個函數並重新編譯庫。 –

回答

1

恐怕沒有辦法列出事件庫監視的對象,更不用說只列出已建立的連接及其狀態。你可以嘗試爲你的需求補充libevent,或者你可以在libevent以外接受的關係中保持得分。

+0

我同意你的意見。現在用bufferevent指針實現二叉樹... –

+0

我認爲這[代碼](https://github.com/jasonish/libevent-examples/blob/master/buffered-echo-server/libevent_echosrv_buffered.c)並做到這一點。接受時,將套接字添加到全局變量中,並在關閉時從全局變量中移除套接字。 –