• 4回复贴,共1

踩坑日记——tcp/ip,BROKEN PIPE错误的原因以及解决方法

只看楼主收藏回复

开发过一个协议,一共有两个服务,第一个服务接收移动平台推送的数据,并使用tcp/ip方式进行数据收发至第二个服务进行数据解析及设备响应。但一段时间后发现使用tcp/ip方式发送数据出错,错误信息为BROKEN PIPE。在度娘上找了找,主要有两个方面。


1楼2022-07-06 17:32回复
    原因一、项目中存在大量的print输出,导致pipe容量不足,使用nohup后台进程处理之后信息会不断地发送给远程pc,如果信息接着不断发送,就会导致pipe容量不足,信息堵塞。 原因二、tcp/ip连接方式进行数据发送、接收。发送方(客户端),接收方(服务端),首先建立socket连接,建立连接后进行数据发送接收。连接的两端必需都打开。连接读端关闭,写端不能写,否则会发出SIGPIPE信号,即会生成BROKEN PIPE错误。即发送端打开,接收端关闭时,发送数据时会出现BROKEN PIPE错误。


    2楼2022-07-06 17:32
    回复
      2025-08-29 18:02:21
      广告
      不感兴趣
      开通SVIP免广告
      一、对于第一种原因,则将项目中所有的print注释或者删除,将必须输出的数据进行日志打印或者输出到指定文件中。 二、对于第二种原因,最好的方式是开发时确保连接两端保持打开或者同时关闭。还可以项目中进行设置,忽略SIGPIPE信号。


      3楼2022-07-06 17:32
      回复
        from signal import signal, SIGPIPE, SIG_DFL # 忽略 SIGPIPE 信号


        4楼2022-07-06 17:32
        回复
          signal(SIGPIPE,SIG_DFL) 48位大咖的思考法则、工作方式、逻辑体系


          5楼2022-07-06 17:32
          回复