2

有没有办法将回调函数与 Linux 中的套接字相关联?

例如,在 connect(s, (struct sockaddr *)peeraddr, sizeof(*peeraddr)) 函数将客户端与服务器连接之后,有没有办法将函数-afterRecv 与套接字-s 关联起来,这样在 recv 函数读取了一些来自套接字的数据, afterRecv 被调用?

我的套接字是阻塞类型的。这种要求背后的原因是,我正在使用 OpenSSL,它在内部握手期间对套接字进行许多发送/接收调用。如果我修改 OpenSSL,那么修改每一个 recv 会很麻烦。所以我在想我是否可以添加回调来简化我的工作。

流程应该是:

  1. 套接字连接逻辑

  2. 接收功能

  3. 在 recv 读取数据后, afterRecv 被调用为 recv 上的回调

4

1 回答 1

3

一些事件库实现了这样的回调钩子:

并且所有图形或 HTTP 服务器库(例如 Gtk/Glib、Qt、LibOnion等)都提供(或使用)此类事件库(围绕多路复用系统调用,如poll(2)等)。

Glib(来自 GTK)和 QtCore(来自 Qt)都是无需任何 GUI 即可使用的事件库

另请阅读有关C10K 问题的信息

于 2013-07-29T17:51:13.857 回答