解决mini_httpd_v1.30在使用http post请求出现 socket hang up的问题
对于mini_httpd v1.30版本,执行post请求时会出现socket hang up 错误,但实际情况是cgi程序执行过了,为什么数据没有写回response?
我们看下mini_httpd.c源文件do_cgi( void )函数的处理,当接受到post请求时,在cgi_interpose_input处理后执行了一次finish_request( 0 );
if ( ( method == METHOD_POST && request_len > request_idx ) )
#endif /* USE_SSL */{int p[2];int r;if ( pipe( p ) < 0 )send_error( 500, "Internal Error", "", "Something unexpected went wrong making a pipe." );r = fork();if ( r < 0 )send_error( 500, "Internal Error", "", "Something unexpected went wrong forking an interposer." );if ( r == 0 ){/* Interposer process. */(void) close( p[0] );cgi_interpose_input( p[1] );finish_request( 0 );}(void) close( p[1] );if ( p[0] != STDIN_FILENO ){(void) dup2( p[0], STDIN_FILENO );(void) close( p[0] );}}
看一下finish_request中的处理,其中会执行shutdown( conn_fd, SHUT_WR )操作,额,这还没response就shutdown貌似不好吧。。。。。。。。。。。。。。。。。。。
干掉cgi_interpose_input,finish_request( 0 )替换为exit(0)万事大吉,开心到飞起!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
static void
finish_request( int exitstatus ){
#undef LINGER_SOCKOPT
#define LINGER_READ#define LINGER_SECS 5#ifdef LINGER_SOCKOPT/* The sockopt version of lingering close. Doesn't actually work. */struct linger lin;shutdown( conn_fd, SHUT_WR );lin.l_onoff = 1;lin.l_linger = LINGER_SECS;(void) setsockopt(conn_fd, SOL_SOCKET, SO_LINGER, (void*) &lin, sizeof(lin) );
#endif /* LINGER_SOCKOPT */#ifdef LINGER_READ/* The "non-blocking read until error/eof/timeout" version of** lingering close.*/int flags;fd_set rfds;struct timeval tv;int r;char* buf[1024];flags = fcntl( conn_fd, F_GETFL, 0 );if ( flags != -1 ){flags |= (int) O_NDELAY;(void) fcntl( conn_fd, F_SETFL, flags );}shutdown( conn_fd, SHUT_WR );for (;;){FD_ZERO( &rfds );FD_SET( conn_fd, &rfds );tv.tv_sec = LINGER_SECS;tv.tv_usec = 0;r = select( conn_fd + 1, &rfds, (fd_set*) 0, (fd_set*) 0, &tv );if ( r <= 0 ) /* timeout or error */break;r = read( conn_fd, (void*) buf, sizeof(buf) );if ( r <= 0 ) /* eof or error */break;}
#endif /* LINGER_READ */exit( exitstatus );}
解决mini_httpd_v1.30在使用http post请求出现 socket hang up的问题相关推荐
- 解决Fiddler不能监听Java HttpURLConnection请求的方法
在默认情况下,Fiddler不能监听Java HttpURLConnection请求.究其原因,Java的网络通信协议栈可能浏览器的通信协议栈略有区别,Fiddler监听Http请求的原理是 在应用程 ...
- Ajax调用springboot接口,Springboot解决ajax+自定义headers的跨域请求问题.pdf
Springboot解解决决ajax+自自定定义义headers的的跨跨域域请请求求问问题题 1..什什么么是是跨跨域域 由于浏览器同源策略 (同源策略,它是由Netscape提出的一 著名的安全策略 ...
- 解决springmvc在multipart/form-data方式提交请求在过滤器Filter中获取不到参数的问题
解决springmvc在multipart/form-data方式提交请求在过滤器Filter中获取不到参数的问题 参考文章: (1)解决springmvc在multipart/form-data方式 ...
- 以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题
以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题 参考文章: (1)以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目 ...
- Android 完美解决9.0的机型,必须请求GPS权限并打开GPS才可以正确获取到WIFI名称
//获取SSID//完美解决9.0的机型,必须请求GPS权限并打开GPS才可以正确获取到WIFI名称private String getNetConfListForSSID(){String ssid ...
- ps无法在此计算机上运行,解决PS打开图片"无法完成请求,因为文件格式模块不能解析该文件"...
当Photoshop(PS)软件打开某张图片的时候,忽然提示并弹出对话框"(不能)无法完成请求,因为文件格式模块不能解析该文件",很多用户会想,明明就是一张图片为什么PS打不开?下 ...
- 解决“允许Traceroute探测”和“ICMP timestamp请求响应漏洞”
1.解决"允许Traceroute探测"和"ICMP timestamp请求响应漏洞" 解决ICMP timestamp请求响应漏洞 sudo iptables ...
- Nodejs发送https Post请求时出现socket hang up错误的解决办法汇总
参考nodejs官网发送http post请求的方法,实现了一个模拟post提交的功能.实际使用时报socket hang up错误. 方法一:后来发现是请求头设置的问题,发送选项中需要加上heade ...
- appium 报错:Original error:Could not proxy command to remote server. Original error:socket hang up解决办法
WebDriverException: Message: An unknown server-side error occurred while processing the command. Ori ...
最新文章
- 查看Oracle数据库SQL执行历史
- 使用xmanager连接centos5.5
- python mql4_可以转发文章不?老外用随机森林预测外汇分钟涨跌准确率高达85%。求高手用python重写。...
- swagger 怎么去掉get delete_自学 Java 怎么入门?
- python minimize_Python数学规划案例一
- js学习笔记(十二)——语法速查表
- Ubuntu18.04之搜狗输入法
- 程序设计教程用c 语言编程,程序设计教程--用C 语言编程
- (对比PDF)Adobe Acrobat DC 离线对比PDF、draftable.com/compare 在线对比PDF
- iOS开发UI篇—无限轮播(循环展示)
- mflac格式解密_如何解密QQ音乐的MFLAC和MGG格式
- 成都双流计算机大专学校,成都双流有哪些好的职业学校?
- python修改系统时间_python修改操作系统时间的方法
- ciscn 2020 Misc the_best_ctf_game
- Xcode6中如何添加pch文件
- 计算机控制作业来看,带PID控制器的最小拍系统设计
- 常用游戏类型简写速查
- bilibili mac客户端 哔哩哔哩 b站mac客户端
- python表达直角坐标系_在直角坐标中,x、 y 是坐标系中任意点的位置,用 x 和 y 表示第一象限或第二象限的 Python 表达式为 。_测量省赛理论答案_学小易找答案...
- Python:OpenCV4识别一个蓝色的圆并估算到相机的距离
热门文章
- 欧阳修与梅尧臣:逢君伊水畔,一见已开颜
- 怎样修复win7无线服务器,win7开启无线服务器
- Cadence IC617工艺库安装步骤
- Mysql 与ES(Elastic Search)对比
- 魔兽争霸Trigger学习教程(0)
- linux 版本二进制编辑工具bless(嵌入式工具集合)
- windows批处理脚本bat命令解析【7】EXIT /B 0
- android自定义相机带方框,Android摄像头开发:拍照后添加相框,融合相框和图片为一副 图片...
- STC15系列单片机与 OV7670 SCCB通讯
- 信息系统面临的安全威胁