You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SSL_read()返回0且SSL_get_error()返回6,读取时连接关闭原因是什么?

问题原因说明

SSL_ERROR_ZERO_RETURN就是你读取返回0字节的直接原因,这个状态表示对端已经正常发送了TLS关闭通知(close_notify),TLS连接已经正常终止,没有更多数据可以读取。

你遇到这个问题的核心原因是:TLS握手完成后你没有向HTTPS服务器发送任何HTTP请求,服务器等待客户端请求超时后,主动关闭了连接,因此你调用SSL_read直接拿到了连接关闭的通知。


代码问题&修复步骤

1. 修复现有代码错误

  • 宏名不匹配:你定义的错误检查宏是CHECK_ERR,但创建socket时用了CHK_ERR,会导致编译报错
  • 变量重复定义:函数入参已经声明了uint8_t *str,函数内部又重复定义char* str
  • 格式化字符串错误:打印接收字节数的printf里写的是% bytes,应该改为%d bytes

2. 新增HTTP请求发送逻辑

TLS握手成功后,需要先构造合法的HTTP请求,用SSL_write发送给服务器,再读取响应,示例代码如下:

// SSL_connect 成功之后添加以下代码
const char *http_req = "GET /你要下载的文件路径 HTTP/1.1\r\n"
                       "Host: 你的服务器IP或域名\r\n"
                       "Connection: close\r\n"
                       "\r\n";
int send_len = SSL_write(ssl, http_req, strlen(http_req));
CHECK_SSL(send_len);

// 之后再调用SSL_read读取响应
err = SSL_read (ssl, buf, sizeof(buf) - 1);

3. 可选补充配置

如果你的HTTPS服务器是多站点托管,用域名访问的话,需要在SSL_connect前添加SNI扩展配置,否则服务器可能会拒绝请求:

SSL_set_tlsext_host_name(ssl, "你的服务器域名");

内容的提问来源于stack exchange,提问作者xyf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:06:04