【发布时间】:2019-03-26 10:45:01
【问题描述】:
在我们的客户端/服务器应用程序中,我们使用 TLS/TCP 协议进行消息传递。一段时间后,应用程序之间会发生消息转移(消息在开始时以正确的顺序发送和接收),即客户端将第 1000 条消息发送到服务器并接收第 999 条消息的响应。嫌疑人在客户端,我们在客户端独立实现 TCP 和 TLS 层,即不将 TCP 套接字绑定到 SSL 对象(通过 SSL_set_fd()),而是使用 BIO。当客户端应用程序从服务器获得响应时(很确定消息在服务器中正确处理,客户端 TCP 层正确接收消息等),消息被转发到 SSL 层。客户端应用程序首先将消息写入 BIO:
BIO_write(readBio, data, length);
然后在 SSL 层的另一个函数中,使用 SSL_read() 读取消息:
res = SSL_read (ssl, buffer, length);
读取操作已成功完成,但我的目标是检查 BIO 中是否还有要读取的记录。我考虑使用 SSL_pending() 方法,但似乎应该使用这个方法来检查 SAME 记录中是否还有字节。如果我们的怀疑是正确的,我想检查 BIO 中是否还有其他记录,以便所有消息都得到处理,不会有任何延迟。你能帮我解决这个问题吗?提前致谢。
【问题讨论】: