4

我正在阅读 openssl 编程教程

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

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

教程文档说我需要在 SSL_read 上处理 SSL_ERROR_WANT_WRITE(当然还有 SSL_ERROR_WANT_READ),因为 SSL 重新握手可以随时发生。
出于同样的原因,SSL_write 上的 SSL_ERROR_WANT_READ。

从文档中,

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

我们需要等待套接字是可写的,但当它是时重新启动读取

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

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

谢谢

4

1 回答 1

6

任何一方都可以在连接期间的任何时候触发重新握手。它与会话恢复没有任何直接关系。

所以是的,如果您希望您的应用程序可靠,您应该准备好同时处理这两种情况SSL_WANT_WRITESSL_WANT_READ无论您当前是在阅读还是在写作。

于 2011-04-10T12:38:40.113 回答