锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / openssl开源 / SSL_shutdown返回-1但errno为0
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

SSL_shutdown返回-1但errno为0


提问

在我的C ++应用程序中,我使用OpenSSL非阻塞BIO连接到服务器。我正在为mac OS X和iOS开发。

第一次调用SSL_shutdown()返回0.这意味着我必须再次调用SSL_shutdown():

可能会出现以下返回值:

0关闭尚未完成。如果要执行双向关闭,则第二次调用SSL_shutdown()。SSL_get_error的输出可能会产生误导,因为即使没有发生错误,也可能会标记错误的SSL_ERROR_SYSCALL。

<0关闭未成功,因为在协议级别发生致命错误或发生连接失败。如果需要采取措施继续非阻塞BIO的操作,也会发生这种情况。使用返回值ret调用SSL_get_error以找出原因。

到目前为止,上帝。第二次调用SSL_shutdown()时会出现问题。返回-1表示发生了错误(参见上文)。现在如果我检查SSL_get_error()我得到错误SSL_ERROR_SYSCALL反过来应该意味着发生了系统错误。但现在抓住了。如果我检查errno它返回0 - >未知错误。到目前为止我对这个问题的看法是,它可能意味着服务器只是“挂断”,但说实话,这并不能让我满意。

这是我关闭的实现:

int result = 0;
int shutdownResult;
while ((shutdownResult = SSL_shutdown(sslHandle)) != 1) { //close connection 1 means everything is shut down ok
if (shutdownResult == 0) { //we are supposed to call shutdown again
continue;
} else if (SSL_get_error(sslHandle, shutdownResult) == SSL_ERROR_WANT_READ) {
[...] //omitted want read code, in this case the application never reaches this point
} else if (SSL_get_error(sslHandle, shutdownResult) == SSL_ERROR_WANT_WRITE) {
[...] //omitted want write code, in this case the application never reaches this point
} else {
logError("Error in ssl shutdown, ssl error: " + std::to_string(SSL_get_error(sslHandle, shutdownResult)) + ", system error: " + std::string(strerror(errno))); //something went wrong
break;
}
}

运行应用程序日志时:

ERROR :: ssl shutdown错误,ssl错误:5,系统错误:未定义错误:0

那么这里只是服务器关闭连接还是存在更严重的问题?我只是缺少一些非常明显的东西吗?

回答

完整的SSL关闭包括两部分:

  • 向对等方发送“关闭通知”警报
  • 从对等方接收“关闭通知”警报

第一个SSL_shutdown返回0,这意味着它确实向对等方发送了“关闭通知”但尚未收到任何回复。第二次调用SSL_shutdown失败,因为对等方没有进行正确的SSL关闭并发送回“关闭通知”,而是关闭了底层的TCP连接。

这种行为实际上非常常见,您通常可以忽略该错误。反正底层TCP连接无论如何都应该关闭,这就不影响。但是,当您希望在同一TCP连接上以明文形式继续时,通常需要正确的SSL关闭,就像FTPS连接中的CCC命令所需要的那样(但即使有各种实现也无法正确处理这种情况)。

我的连接在关机后完成。我不会再使用它了。所以它基本上是服务器只是“挂断”。我已经忽略了那个具体的错误。我只想了解它。谢谢内心

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内