对 OpenSSL 非阻塞 I/O 感到困惑

2023-11-24

一般来说,OpenSSL 库(C API)似乎提供了两种方法来做所有事情:您可以使用根据您的喜好配置的普通系统套接字,或者您可以使用 OpenSSLBIO有点像流的对象。

然而,我经常对一些重复的功能感到困惑。例如,如何使 SSL 连接非阻塞?一种方法似乎是简单地访问底层文件描述符并将其设置为非阻塞使用fcntl。但还有一个 OpenSSL API 函数称为BIO_set_nbio其中需要一个BIO*对象并将其设置为非阻塞模式。

那么设置非阻塞 SSL 套接字的最佳方法是什么?如果您向 OpenSSL 传递一个本机文件描述符(即already通过设置为非阻塞模式fnctl?还需要专门打电话吗BIO_set_nbio使BIO对象非阻塞?


我认为大多数人更喜欢 BIO 接口,但 BIO 例程只使用平台上可用的任何本机非阻塞套接字 API。我不知道如果混合搭配会发生什么。

请注意,SSL 的非阻塞 I/O 是much一般来说,比 TCP 更棘手。如果你不明白这一点,你就会折磨自己。有书由约翰·维加另一个由埃里克·雷斯科拉进入这一点,您当然可以阅读 OpenSSL 邮件列表来了解这造成的胃痛。软件中包含一些很好的代码示例,展示了使用 OpenSSL 进行非阻塞 SSL 编程TOR项目,以及curl公用事业。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 OpenSSL 非阻塞 I/O 感到困惑 的相关文章

随机推荐

  • 使用 OR 运算符检查变量值

    因此 我团队中的一位初级程序员今天编写了以下代码 if status incomplete unknown 这显然不会达到他的预期 即 if status incomplete status unknown 但我无法解释的是为什么第一段代码
  • 具有单一方法的类——最好的方法?

    假设我有一个旨在执行单个功能的类 执行完该功能后 就可以将其销毁 有什么理由选择其中一种方法吗 Initialize arguments in constructor MyClass myObject new MyClass arg1 ar
  • 在存档中安装 R 包

    如何在 Windows 中安装存档的软件包 http cran r project org src contrib Archive 当我尝试安装从存档下载的 tar gz 时 出现以下错误 Error in gzfile file r ca
  • Firestore 安全规则中的递归通配符未按预期工作

    我有一个像这样的数据结构 收藏 and 文件而不是JSON当然 但你明白了 users user1 name Alice groups groupA subbed true groupB subbed true user2 name Bob
  • Valums 文件上传器在 Internet Explorer 9 下不起作用

    Values 文件上传器 现在称为精美上传者 在 Internet Explorer 9 下不起作用 但在 Chrome 下工作得很好 因此 在 IE 下 它会显示文件名和取消按钮 并且不会显示上传百分比 有什么线索吗 更新 解决方案也在这
  • 从网络中的另一台机器 Ping Docker 容器

    我创建了一个 docker 容器 并尝试在容器的 bash 中 ping www google com 并且它有效 我还尝试从主机 ping 容器 它工作得很好 但是 当我尝试从网络中的外部系统 ping 容器时 它给了我一个请求超时异常
  • CakePHP 从数据库中查询最近的纬度经度

    在 CakePHP v3 应用程序中 如何根据传递的 lat lng 值检索最接近的结果 我想让它们恢复为原生 CakePHP 实体 所以像这样 public function closest lat lng sightings recor
  • 我应该将时区与 Postgres 和 JDBC 的时间戳分开存储吗?

    看起来 也许我是错的 如果你想保留 JDBC 和 Postgres 发生问题时的时区 你需要将时区与时间戳分开存储 也就是说我更愿意给我的 ORM JDBC JPA 一个 JavaCalendar 或乔达DataTime 与说时区Ameri
  • 动态创建的文本框的 JavaScript 验证

    在表单中 通过单击 添加 按钮动态创建文本框 以便在新行中创建文本框 现在我的问题是动态创建的文本框的验证 以便如果有任何文本框 它会显示一条消息单击 提交 按钮提交表单时留空 请帮助我 EDIT
  • Python Plotly - 对齐散点图和条形图的 Y 轴

    我正在尝试使用散点图和图形元素创建一个绘图图 一切都很顺利 但有一个问题 两个 Y 轴没有围绕 0 对齐 我尝试过使用不同的属性 例如 mirror 和tick0 我也尝试遵循plotly网站上的示例 但它主要是具有相同图形类型的多个y轴
  • 在数据重新加载时保存 WPF TreeView 状态

    我正在使用 TreeView 在 UI 中显示我的数据 现在 我的应用程序每 5 秒刷新一次 以便显示最新的数据 有没有办法即使在窗口重新加载后也可以保存树视图的展开状态或折叠状态 因为如果我有大量数据并且需要超过 5 秒才能转到所需数据
  • 如何在 Blazor 组件上进行双向绑定

    我想创建自定义输入 所以我创建了这个组件 MyInputComponent razor div div
  • jquery历史记录插件

    我正在使用这个插件 http plugins jquery com project history 在本页面 http www crtaci info index php autocom majice 我不知道为什么 但似乎我不知道该怎么做
  • 如何关闭额外的日志记录?

    我有一个使用 Spring 和 CXF 的 Java 服务 该代码来自以前的开发人员 我正在提供维护 但我在日志中看到了这一点 Apr 16 2013 1 44 11 PM org apache cxf interceptor Abstra
  • 如何让 Winston 使用 Webpack?

    我有一个使用 Node js 的电子应用程序 我想使用 Winston 登录应用程序 我已将winston 添加到我的package json 文件中 但是当我运行webpack 的构建命令时 我收到了winston 中colors js
  • 使用 ctypes 模块从 python 调用的共享库捕获打印输出

    我正在使用一个通过 ctypes 模块调用的共享库 我想将与此模块关联的标准输出重定向到我可以在程序中访问的变量或文件 然而 ctypes 使用与 sys stdout 不同的标准输出 我将演示我在使用 libc 时遇到的问题 如果有人复制
  • 如何检查日期时间是否在中午之前

    我在 python 中有一个日期时间对象 我想创建一个函数来检查输入是在日期时间当天的上午还是下午 即中午 12 点之前或之后 如何手动创建时间12 00我可以为此使用大于或小于符号吗 lt gt 致电datetime datetime t
  • 在 SQL Server 中迭代 XML 变量

    我在存储过程 SQL Server 2008 中有一个 XML 变量 其示例值为
  • Android 4.0 (API 14+) 中 Activity 之间的默认转换是什么

    我构建了一个包含相当多活动的应用程序 我希望在它们之间实现 进入时从右滑动 退出时从左滑动 转换 我不止一次地读到幻灯片过渡应该是 Android 默认设置 但在我正在开发的设备上 过渡默认是淡入 淡出 Galaxy Tab 2 7 在 I
  • 对 OpenSSL 非阻塞 I/O 感到困惑

    一般来说 OpenSSL 库 C API 似乎提供了两种方法来做所有事情 您可以使用根据您的喜好配置的普通系统套接字 或者您可以使用 OpenSSLBIO有点像流的对象 然而 我经常对一些重复的功能感到困惑 例如 如何使 SSL 连接非阻塞