对于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的问题相关推荐

  1. 解决Fiddler不能监听Java HttpURLConnection请求的方法

    在默认情况下,Fiddler不能监听Java HttpURLConnection请求.究其原因,Java的网络通信协议栈可能浏览器的通信协议栈略有区别,Fiddler监听Http请求的原理是 在应用程 ...

  2. Ajax调用springboot接口,Springboot解决ajax+自定义headers的跨域请求问题.pdf

    Springboot解解决决ajax+自自定定义义headers的的跨跨域域请请求求问问题题 1..什什么么是是跨跨域域 由于浏览器同源策略 (同源策略,它是由Netscape提出的一 著名的安全策略 ...

  3. 解决springmvc在multipart/form-data方式提交请求在过滤器Filter中获取不到参数的问题

    解决springmvc在multipart/form-data方式提交请求在过滤器Filter中获取不到参数的问题 参考文章: (1)解决springmvc在multipart/form-data方式 ...

  4. 以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题

    以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目中是session_id命名的)发送请求问题 参考文章: (1)以整体思维看问题:解决单页应用,系统角色请求覆盖身份唯一标识(本项目 ...

  5. Android 完美解决9.0的机型,必须请求GPS权限并打开GPS才可以正确获取到WIFI名称

    //获取SSID//完美解决9.0的机型,必须请求GPS权限并打开GPS才可以正确获取到WIFI名称private String getNetConfListForSSID(){String ssid ...

  6. ps无法在此计算机上运行,解决PS打开图片"无法完成请求,因为文件格式模块不能解析该文件"...

    当Photoshop(PS)软件打开某张图片的时候,忽然提示并弹出对话框"(不能)无法完成请求,因为文件格式模块不能解析该文件",很多用户会想,明明就是一张图片为什么PS打不开?下 ...

  7. 解决“允许Traceroute探测”和“ICMP timestamp请求响应漏洞”

    1.解决"允许Traceroute探测"和"ICMP timestamp请求响应漏洞" 解决ICMP timestamp请求响应漏洞 sudo iptables ...

  8. Nodejs发送https Post请求时出现socket hang up错误的解决办法汇总

    参考nodejs官网发送http post请求的方法,实现了一个模拟post提交的功能.实际使用时报socket hang up错误. 方法一:后来发现是请求头设置的问题,发送选项中需要加上heade ...

  9. 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 ...

最新文章

  1. 查看Oracle数据库SQL执行历史
  2. 使用xmanager连接centos5.5
  3. python mql4_可以转发文章不?老外用随机森林预测外汇分钟涨跌准确率高达85%。求高手用python重写。...
  4. swagger 怎么去掉get delete_自学 Java 怎么入门?
  5. python minimize_Python数学规划案例一
  6. js学习笔记(十二)——语法速查表
  7. Ubuntu18.04之搜狗输入法
  8. 程序设计教程用c 语言编程,程序设计教程--用C 语言编程
  9. (对比PDF)Adobe Acrobat DC 离线对比PDF、draftable.com/compare 在线对比PDF
  10. iOS开发UI篇—无限轮播(循环展示)
  11. mflac格式解密_如何解密QQ音乐的MFLAC和MGG格式
  12. 成都双流计算机大专学校,成都双流有哪些好的职业学校?
  13. python修改系统时间_python修改操作系统时间的方法
  14. ciscn 2020 Misc the_best_ctf_game
  15. Xcode6中如何添加pch文件
  16. 计算机控制作业来看,带PID控制器的最小拍系统设计
  17. 常用游戏类型简写速查
  18. bilibili mac客户端 哔哩哔哩 b站mac客户端
  19. python表达直角坐标系_在直角坐标中,x、 y 是坐标系中任意点的位置,用 x 和 y 表示第一象限或第二象限的 Python 表达式为 。_测量省赛理论答案_学小易找答案...
  20. Python:OpenCV4识别一个蓝色的圆并估算到相机的距离

热门文章

  1. 欧阳修与梅尧臣:逢君伊水畔,一见已开颜
  2. 怎样修复win7无线服务器,win7开启无线服务器
  3. Cadence IC617工艺库安装步骤
  4. Mysql 与ES(Elastic Search)对比
  5. 魔兽争霸Trigger学习教程(0)
  6. linux 版本二进制编辑工具bless(嵌入式工具集合)
  7. windows批处理脚本bat命令解析【7】EXIT /B 0
  8. android自定义相机带方框,Android摄像头开发:拍照后添加相框,融合相框和图片为一副 图片...
  9. STC15系列单片机与 OV7670 SCCB通讯
  10. 信息系统面临的安全威胁