SSL_read()时是否需要处理SSL_ERROR_WANT_WRITE?

eug*_*ene 3 openssl nonblocking handshake

我正在阅读openssl编程教程.

我不能让服务器应用程序在单个连接的任何操作上被阻止,
因此我将使用非块套接字.

看起来,ssl握手发生在ssl_accept和ssl_connect,
这可能被阻止,我必须在ssl_accept调用之前将套接字设置为非阻塞.

教程文档说我需要在SSL_read上处理SSL_ERROR_WANT_WRITE(当然还有SSL_ERROR_WANT_READ),因为SSL rehandshaking可以随时进行.
SSL_write上的SSL_ERROR_WANT_READ也是出于同样的原因.

来自doc,

如果我们尝试重新握手,我们会得到一个WANT_WRITE,并且在重新握手期间阻止写入.

我们需要等待套接字可写,但重新启动读取

我对"重新"握手感到困惑.
我不打算保存ssl状态并重用它(这称为会话恢复?)在第一次握手之后,我不必处理同一连接的握手.

当我不打算使用会话恢复时,我想知道我是否还需要担心SSL_read上的WANT_WRITE,反之亦然.

谢谢

caf*_*caf 5

在连接期间的任何一点都可以由任何一方触发重新整形.它与会话恢复没有任何直接关系.

所以,是的,如果你想你的应用程序是可靠的,你应该准备同时处理SSL_WANT_WRITESSL_WANT_READ是否正在读取或写入不管.