【问题标题】:Confused about OpenSSL non-blocking I/O对 OpenSSL 非阻塞 I/O 感到困惑
【发布时间】:2017-09-22 16:24:49
【问题描述】:

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

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

那么设置非阻塞 SSL 套接字的最佳方法是什么?如果您通过fnctl已经设置为非阻塞模式的本机文件描述符传递给OpenSSL,会发生什么?是否还需要专门调用BIO_set_nbio 使BIO 对象不阻塞?

【问题讨论】:

    标签: c security ssl openssl nonblocking


    【解决方案1】:

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

    请注意,SSL 的非阻塞 I/O 比 TCP 的一般情况要复杂得多。如果你不明白这一点,你就会在折磨自己。有 John ViegaEric Rescorla 的另一本书,您当然可以阅读 OpenSSL 邮件列表来了解这引起的胃灼热。 TOR projectcurl 实用程序的软件中包含一些显示使用 OpenSSL 进行非阻塞 SSL 编程的优秀代码示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      相关资源
      最近更新 更多