假设一个场景:
一个套接字上已到达多个ssl/tls记录
这些记录一次解析一个(并且有足够大的缓冲区来保存它们)。
在解析在ssl层缓冲的最终记录之前,我检测到无效的应用程序数据,并希望在不解析其余传入数据的情况下关闭连接。
是否会丢弃套接字上任何剩余的ssl读取数据(我还没有为其调用read),或者我是否总是需要先继续调用SSL_read()
,直到它产生SSL_shutdown()
(这将浪费cpu周期来提取我不再关心的数据),然后调用SSL_read()
?
我担心的是SSL_read()
也会产生SSL_ERROR_WANT_READ
(至少根据手册页),但如果出于任何原因,套接字上仍有未读数据,则不一定会因为如何使用SSL_shutdown()
而收到新传入数据包的通知。
最佳答案
检查了openssl的ssl关闭代码和文档。没有提到作为关闭的一部分所做的清理工作。它似乎只向对等方发送关闭通知,并将状态设置为适当的状态。
我觉得你正在寻找的清理将在调用ssl-free(ssl)时完成。(只是我的想法是没有深入检查免费代码)。