非阻塞套接字在OpenSSL中仍然可以阻塞吗?

非阻塞套接字在OpenSSL中仍然可以阻塞吗?,openssl,nonblocking,Openssl,Nonblocking,我还没有得到这个问题的明确答案 如果我使用非阻塞套接字,对SSL\u的调用是否可以读取或写入仍然阻塞? 如果我在没有可读取内容时调用SSL_read,它会立即返回吗 SSL_写入(16kb)需要多少时间?你能相信最坏的情况吗?或者这种情况会有很大变化吗 我有4ms的周期,我必须做一些事情,这样我就不能进行超过4ms的读写,这是不可能可靠实现的吗?SSL\u read的文档说明: SSL_read()的行为取决于基础BIO 及 如果基础BIO被阻塞,SSL_read()将只返回一次 读取操作已完成

我还没有得到这个问题的明确答案

如果我使用非阻塞套接字,对SSL\u的调用是否可以读取或写入仍然阻塞? 如果我在没有可读取内容时调用SSL_read,它会立即返回吗

SSL_写入(16kb)需要多少时间?你能相信最坏的情况吗?或者这种情况会有很大变化吗


我有4ms的周期,我必须做一些事情,这样我就不能进行超过4ms的读写,这是不可能可靠实现的吗?

SSL\u read的文档说明:

SSL_read()的行为取决于基础BIO

如果基础BIO被阻塞,SSL_read()将只返回一次 读取操作已完成或发生错误,但以下情况除外: 重新协商会发生,在这种情况下,可能会出现SSL\u错误\u WANT\u READ 发生。此行为可以通过SSL\u模式\u自动\u重试进行控制 SSL_CTX_set_模式调用的标志

如果基础BIO是非阻塞的,SSL_read()也将返回 当底层BIO无法满足SSL_read()的需要时 继续操作。在本例中,使用 SSL\u read()的返回值将产生SSL\u错误\u希望\u读取或 SSL\u错误\u需要\u写入。由于在任何时候都有可能进行重新谈判 调用SSL_read()也会导致写操作!召唤 然后,流程必须在采取适当的操作后重复调用 满足SSL_read()的需要。行动取决于潜在的风险 生物使用非阻塞套接字时,无需执行任何操作,但 select()可用于检查所需的条件。当使用 缓冲BIO和BIO对一样,数据必须写入或检索 在能够继续之前,请退出BIO

如果您想知道SSL_写入完成一定数量的字节需要多长时间,那么必须对其进行测试。还要在不同的系统上测试它,以了解它所需的一般时间,除非您总是让同一个系统运行代码,我对此表示怀疑

看看这篇文章。Remy回答了这个问题,他知道如何实现SSL: