1

给定一个场景:

  • 多个 SSL/TLS 记录已到达单个套接字
  • 这些记录一次解析一个SSL_read()(以及足够大的缓冲区来保存它们)。
  • 在解析在 SSL 层缓冲的最终记录之前,我检测到无效的应用程序数据并希望关闭连接而不解析剩余的传入数据

SSL_shutdown()丢弃套接字上我尚未调用SSL_read()read 的任何剩余 SSL 读取数据,还是我总是需要继续SSL_read()先调用直到它产生SSL_ERROR_WANT_READ(这会浪费 CPU 周期来提取我什至不再关心的数据) 然后调用SSL_shutdown()?

我担心的是它SSL_shutdown()也可以产生SSL_ERROR_WANT_READ(至少根据手册页),但是如果由于某种原因在套接字上仍有未读数据,我不一定会因为我使用epoll_wait().

4

1 回答 1

0

检查了 openssl 的 ssl_shutdown 代码以及文档。没有提到作为关机的一部分进行的清理。它似乎只向对等方发送关闭通知并将状态设置为适当的状态。

我觉得您正在寻找的清理工作将在调用 SSL_free(ssl) 时完成。(只是我的想法,因为没有深入检查免费代码)。

于 2014-02-26T12:13:13.407 回答