ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-07-12 18:06:41  阅读:795  来源: 互联网

标签:ip tcp PIPE BROKEN SIGPIPE 连接


背景

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

原因

        原因一、项目中存在大量的print输出,导致pipe容量不足,使用nohup后台进程处理之后信息会不断地发送给远程pc,如果信息接着不断发送,就会导致pipe容量不足,信息堵塞。

        原因二、tcp/ip连接方式进行数据发送、接收。发送方(客户端),接收方(服务端),首先建立socket连接,建立连接后进行数据发送接收。连接的两端必需都打开。连接读端关闭,写端不能写,否则会发出SIGPIPE信号,即会生成BROKEN PIPE错误。即发送端打开,接收端关闭时,发送数据时会出现BROKEN PIPE错误。

解决方法

        一、对于第一种原因,则将项目中所有的print注释或者删除,将必须输出的数据进行日志打印或者输出到指定文件中。

        二、对于第二种原因,最好的方式是开发时确保连接两端保持打开或者同时关闭。还可以项目中进行设置,忽略SIGPIPE信号。

from signal import signal, SIGPIPE, SIG_DFL
# 忽略 SIGPIPE 信号
signal(SIGPIPE,SIG_DFL)

标签:ip,tcp,PIPE,BROKEN,SIGPIPE,连接
来源: https://blog.csdn.net/qq_56623503/article/details/118676272

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有