SSL_read返回SSL_ERROR_WANT_READ怎么办?

SSL_read返回SSL_ERROR_WANT_READ怎么办?

对SSL_read返回SSL_ERROR_WANT_READ的实践、理解和处理

在openssl使用编程中遇到问题,代码片段是这样的:
ret=SSL_read(ssl, line, sizeof (line));
err=SSL_get_error(ssl,ret); //观察返回值的情况,err=2时ret=-1, err=0时l=实际读取字节数
返回err=SSL_ERROR_WANT_READ时即err=2;
SSL_ERROR_WANT_READ的宏定义值就是2
那后续怎么处理呢?有人说在对ssl读之前要设一个超时,这是一种方法;但我经过实践,与其设置超时,不如直接多次重复读取一段时间,看看到底
是不是要延迟读取才有数据,但结果是重复无数次也是得不到任何数据。
这可以联想到,其实这并不是对端真正有延迟发送数据的情况,而是可能对端根本就是忘记发送后续数据了,只是本地认为需要继续读取数据而已,这
应该是对端程序的一个bug。
那我们本地处理的话,直接把它做为出错处理、退出就行。
举个例子,其中的注释就是实践总结的经验:
int ssl_recv(SSL_CTX *ctx, SSL **in_ssl, int cli_sock, char *buf, size_t len)
//这是一个收到客户端发送握手数据时的处理
{
…//ssl初始化
for(;?{
if (!SSL_is_init_finished(ssl)){
r&#

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值