小存储嵌入式设备上使用thttpd进行文件上传遇到的问题
来源:互联网 发布:淘宝卖家公益宝贝计划 编辑:程序博客网 时间:2024/05/20 11:51
最近一直被这个问题所困扰,使用thttpd作为嵌入式httpserver进行设备升级时,上传升级文件时server端总是无故断开,由于最开始我使用了cgic库来进行编码,后来对源码进行分析,发现cgic在处理上传数据时会存储为临时文件,由于系统flash比较小,没有足够的地方存放临时文件,因此出错了,后来不使用cgic库进行调试,发现上传依然不成功,就开始对thttpd的源码进行跟踪和分析,发现thttpdserver对post方式上传文件进行了不同的处理,由于最初查找的一篇资料说thttpd把接收过来的数据也暂存为了临时文件,因此就一直在源码中找这一段,后来发现thttpd并没有进行临时文件的存储,他在POST操作时,进行了分支处理,当被POST的页面是静态页面时,其他数据直接丢弃,但是config.h中定义了一个LINGER_TIME设定了时间限制,当POST静态页面超过LINGER_TIME设定的时间时,连接就会意外中断.当被POST的页面是CGI文件时,他在libhttpd.c的cgi_child函数中fork出了两个子进程,这两个子进程都对应一个管道,其中一个进程负责从socket中接收数据,然后进行管道写操作,写管道的目标是被重定向后的标准输入stdin,另一个子进程负责从标准输出stdout中取数据(就是返回给浏览器的数据),在进行跟踪后,发现,POST中断在管道写操作这个函数中(cgi_interpose_input),在对标准输入进行写操作时,由于stdin中的数据没有及时没读取,导致了管道操作失败,当在cgi页面中同步使用fread从stdin中读取数据后,问题解决.
- 小存储嵌入式设备上使用thttpd进行文件上传遇到的问题
- thttpd的文件上传
- 嵌入式设备使用的web服务器 ——thttpd移植
- 多文件上传---遇到的小问题---uploadify
- 上传到HDFS上的文件遇到乱码问题
- 嵌入式设备使用的web服务器 ——thttpd移植 (非常详细,仔细品味一定会有收获)
- 文件上传遇到的问题
- 使用Junit进行单元测试时遇到的问题记录[上]
- linux使用ftpclient文件上传遇到的问题
- 使用commons-fileupload.jar servlet上传文件 遇到的问题
- 使用formdata+ajax文件上传中遇到的问题
- AFNetworking上传遇到的小问题
- mysql 存储过程遇到的小问题
- linux上遇到的小问题
- 上传wmv文件遇到的问题
- jsp、servlet上传文件遇到的问题
- struts文件上传和遇到的问题
- struts文件上传和遇到的问题
- system 权限下键盘记录
- python调试
- IIS搭建配置,目录权限设置
- 用户,角色,群组,菜单权限控制
- Access/Hybrid/Trunk 端口模式及区别
- 小存储嵌入式设备上使用thttpd进行文件上传遇到的问题
- C# 2005 & .Net 3.0高级编程 勘误(五)
- sitemesh的简单回顾
- 在struts中使用Validator框架
- load的小结
- 一张图片汇聚全部linux常用命令
- java中defalut和friendly的区别
- Reuse your Hibernate/JPA domain model with Grails
- Struts框架中的表单验证与资源文件