【问题标题】:Do I need to handle SSL_ERROR_WANT_WRITE when SSL_read()?SSL_read() 时是否需要处理 SSL_ERROR_WANT_WRITE?
【发布时间】:2011-08-01 03:54:59
【问题描述】:

我正在阅读一个openssl 编程tutorial

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

看起来,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,反之亦然。

谢谢

【问题讨论】:

    标签: openssl nonblocking handshake


    【解决方案1】:

    在连接过程中,任何一方都可以触发重新握手。它与会话恢复没有任何直接关系。

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

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      相关资源
      最近更新 更多