ghttp作为客户端下载大文件的问题
来源:互联网 发布:js复选框取消选中事件 编辑:程序博客网 时间:2024/04/30 10:14
使用开源库ghttp作为http client,板子测试发现当下载大文件时出现崩溃情况;
查了,发现问题是:
http_trans.c中http_trans_read_into_buf(http_trans_conn *a_conn)函数
a_conn->io_buf = realloc(a_conn->io_buf, a_conn->io_buf_len + a_conn->io_buf_io_left); a_conn->io_buf_len += a_conn->io_buf_io_left;
这段代码有点问题,当下载很大文件时,
a_conn->io_buf_len + a_conn->io_buf_io_left就会变得超大,在内存有限制的嵌入式板子上就会出现返回的指针为空的情况;最终崩溃的表现在调用flush时:
static voidflush_response_body(http_resp *a_resp, http_trans_conn *a_conn){ if (a_resp->body != NULL) { free(a_resp->body); } a_resp->flushed_length += a_resp->body_len; a_resp->body_len = a_conn->io_buf_alloc; a_resp->body = malloc(a_conn->io_buf_alloc + 1); memset(a_resp->body, 0, a_conn->io_buf_alloc + 1); memcpy(a_resp->body, a_conn->io_buf, a_conn->io_buf_alloc); /* clean the buffer */ http_trans_buf_reset(a_conn);}memcpy(a_resp->body, a_conn->io_buf, a_conn->io_buf_alloc);崩溃,即a_conn->io_buf为空指针临时解决方法:把大文件进行分割成小的单位进行断点下载。0 0
- ghttp作为客户端下载大文件的问题
- 客户端文件的下载
- IIS6 解决下载/上传大文件的问题
- 解决各大浏览器下载文件,文件名乱码的问题
- 如何破解百度云限速和下载大文件需要客户端的限制
- 百度云管家不用客户端下载大文件
- 如何绕过百度网盘客户端下载大文件
- Safari避开百度云客户端下载大文件
- 大文件下载的实现
- 大文件的下载(分批下载)
- 使用C#作为客户端的PHP服务器上传文件
- 使用jQuery Html() 作为客户端htmlEncode的问题
- Java客户端下载服务器端的文件
- 客户端下载文件(zip)的方法
- 多线程文件下载的服务器端及客户端
- 使用iis作为.apk文件下载的服务器
- 文件下载中input.read()与output.write()相关问题,以及mp3下载的文件比原文件大的解决方法
- 只要一下载大文件,电脑的联网客户端就掉线………………哈哈,已解决!!!
- Linux运维学习第九课
- STM32 HAL库详解 及 手动移植
- [ Godot Engine ]
- Learnjava--色子点数概率(转)
- nlp文本处理开源工具,及聊天机器人实现
- ghttp作为客户端下载大文件的问题
- PHP中的会话控制(二):session
- C++ 虚函数表解析
- 简单使用Ajax实现异步查询用户名是否被占用
- Shiro中自定义Realm的作用(FormAuthenticationFilter和PermissionAuthorizationFilter)以及源码解析
- Visual Studio控制台程序输出窗口一闪而过的解决方法
- ssm整合原来的版本
- android 实现拉出回弹效果通过自定义ListView重写overScrollBy()
- [BZOJ3510][启发式合并][LCT维护子树信息]首都