OpenSSL BIO和SSL_read

时间:2018-10-22 11:12:44

标签: c++ ssl tcp openssl

在客户端/服务器应用程序中,我们使用TLS / TCP协议进行消息传递。一会儿之后(在开始时以正确的顺序发送和接收消息),即在应用程序之间发生消息转移,即客户端将第1000条消息发送到服务器并接收消息999的响应。嫌疑人在客户端,我们在客户端独立实现TCP和TLS层,即不使用TCP套接字将SSL套接字绑定到SSL对象(通过SSL_set_fd())。当客户端应用从服务器获取响应时(非常确定该消息已在服务器中正确处理,客户端TCP层正确接收了消息等),该消息将转发到SSL层。客户端应用首先将消息写入BIO:

BIO_write(readBio,数据,长度);

然后在SSL层的另一个功能中,使用SSL_read()读取消息:

res = SSL_read(ssl,缓冲区,长度);

读取操作成功完成,但是我的目标是检查BIO中是否还有其他记录要读取。我考虑使用方法SSL_pending(),但似乎应该使用此方法来检查SAME记录中是否还有字节。如果我们的嫌疑人是正确的,我想检查一下BIO中是否还有另一条记录,以便所有消息都得到及时处理。您能在这个问题上帮我吗?预先感谢。

1 个答案:

答案 0 :(得分:0)

SSL_pending告诉您是否存在来自当前已解密SSL记录的数据,但尚未被SSL_read读取。 BIO_pending可用于确定BIO中是否已经有SSL层未处理的数据。要找出套接字级别的未读数据,请使用MSG_PEEK