【问题标题】:Callback on sockets in linuxlinux中的socket回调
【发布时间】:2013-07-29 14:12:12
【问题描述】:

有没有办法在 Linux 中将回调函数与套接字关联起来?

例如, 在 connect(s, (struct sockaddr *)peeraddr, sizeof(*peeraddr)) 函数已将客户端与服务器连接后,有没有办法将函数 afterRecv 与 socket- s 相关联,以便在 recv 函数从套接字读取一些数据之后, afterRecv 被调用?

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

流程应该是:

  1. 套接字连接逻辑

  2. 接收函数

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

【问题讨论】:

  • 当您似乎计划重新编译 OpenSSL 的源代码时,将 recv() 替换为您自己的版本(环绕原来的 recv())就可以了,不是吗?
  • @alk 是的,这似乎是一个不错的选择。
  • 如果您愿意使用 C++,boost ASIO 库对事件驱动的 I/O 和 SSL 提供了出色的支持。

标签: c linux sockets networking openssl


【解决方案1】:

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

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

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

另请阅读C10K problem

【讨论】:

    猜你喜欢
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 2022-01-22
    相关资源
    最近更新 更多