2013-07-29 20 views
2

有什麼辦法可以將回調函數與Linux中的套接字相關聯嗎?Linux中的套接字回調

例如, 後連接(一個或多個,(結構sockaddr *)peeraddr,的sizeof(* peeraddr)),與服務器功能已連接的客戶端,有一個方法的功能 - afterRecv與承插S,從而關聯,經過recv函數已經從套接字讀取了一些數據,afterRecv被調用了嗎?

我的套接字是阻塞類型。這種需求背後的原因是,我正在使用一個OpenSSL,它在內部握手期間在套接字上執行了許多發送/接收調用。如果我修改OpenSSL,那麼修改每個recv都會非常麻煩。所以我在考慮是否可以添加回調,這將使我的工作變得輕鬆。

的流動應該是:

  1. Socket連接邏輯

  2. recv函數

  3. 的recv已讀出的數據之後,afterRecv被調用作爲回調上的recv

+0

可用事件庫,你似乎被刨去重新編譯OpenSSL的來源,更換' recv()'通過你自己的版本(包裝原始的'recv()')來完成這項工作,不是嗎? – alk

+0

@alk是的,這似乎是一個不錯的選擇。 – jshag

+0

如果您願意使用C++,[boost ASIO](http://www.boost.org/doc/libs/1_54_0/libs/asio/)庫對事件驅動的I/O和SSL具有出色的支持。 –

回答

3

一些事件庫實現了這樣的回調鉤子:

和所有圖形或HTTP服務器庫(例如Gtk/Glib,Qt,LibOnion,...)提供(或使用)這樣的事件庫(圍繞諸如poll(2)等的多路複用系統調用)。

兩個油嘴(從GTK)和QtCore(從Qt的),不會在任何GUI

閱讀也即將C10K problem