管道破裂的原因解釋如下

拷貝黏貼

我寫了一個服務器程序,在Linux下測試,然后用C++寫了客戶端用千萬級別數量的短鏈接進行壓力測試. 但是服務器總是莫名退出,沒有core文件.

最后問題確定為, 對一個對端已經關閉的socket調用兩次write, 第二次將會生成SIGPIPE信號, 該信號默認結束進程.

具體的分析可以結合TCP的"四次握手"關閉. TCP是全雙工的信道, 可以看作兩條單工信道, TCP連接兩端的兩個端點各負責一條. 當對端調用close時, 雖然本意是關閉整個兩條信道, 但本端只是收到FIN包. 按照TCP協議的語義, 表示對端只是關閉了其所負責的那一條單工信道, 仍然可以繼續接收數據. 也就是說, 因為TCP協議的限制, 一個端點無法獲知對端的socket是調用了close還是shutdown.

對一個已經收到FIN包的socket調用read方法, 如果接收緩沖已空, 則返回0, 這就是常說的表示連接關閉. 但第一次對其調用write方法時, 如果發送緩沖沒問題, 會返回正確寫入(發送). 但發送的報文會導致對端發送RST報文, 因為對端的socket已經調用了close, 完全關閉, 既不發送, 也不接收數據. 所以, 第二次調用write方法(假設在收到RST之后), 會生成SIGPIPE信號, 導致進程退出.

解決方案也提供了。如下

系統里邊定義了三種處理方法:(1)SIG_DFL信號專用的默認動作:(a)如果默認動作是暫停線程,則該線程的執行被暫時掛起。當線程暫停期間,發送給線程的任何附加信號都不交付,直到該線程開始執行,但是SIGKILL除外。(b)把掛起信號的信號動作設置成SIG_DFL,且其默認動作是忽略信號 (SIGCHLD)。(2)SIG_IGN忽略信號(a)該信號的交付對線程沒有影響(b)系統不允許把SIGKILL或SIGTOP信號的動作設置為SIG_DFL3)SIG_ERR項目中我調用了signal(SIGPIPE,SIG_IGN), 這樣產生SIGPIPE信號時就不會中止程序,直接把這個信號忽略掉。

linux下软件如何防破裂,linux下管道破裂的處理相关推荐

  1. linux 更新软件命令 失败,对linux下软件(库)的更新命令详解

    在ubuntu服务器下安装包的时候,经常会用到sudo apt-get install 包名 或 sudo pip install 包名,那么两者有什么区别呢? 1.区别 pip用来安装来自PyPI( ...

  2. linux jlink软件安装,jlink 在LINUX下安装

    由于刚开始没搞明白,在linux解压了一个v488版,结果jlink里的固件就搞坏了. 环境: winxp 32位, vmware 6.0,  centos 5.5 1. 重写jlink固件, 在xp ...

  3. linux安装软件不同用户名密码,Linux的安装和基本命令

    linux: 学习目的:为了熟练掌握linux下的操作. linux诞生: 1991 年4 月 林纳斯·托瓦兹,在学习minix系统的时候发现这个系统的不足,然后开始编写一个新的免费的操作系统,他在开 ...

  4. Linux常用软件和安装方法,Linux软件安装与卸载常用方法(转)

    Linux下软件安装方法总结: 一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd so ...

  5. linux装软件需要root用户,Linux下非root用户安装软件的一般流程:

    1. 获取源代码,一般是wget方式,ubuntu可以使用apt-get source来获取源代码. 2. 解压源代码,一般使用tar -zxvf xxx.tar.gz即可 3. 切换到解压后的目录, ...

  6. linux 室内设计软件,功能强大!Ubuntu下安装最新免费3D室内设计软件

    原标题:功能强大!Ubuntu下安装最新免费3D室内设计软件 来自:Linux迷https://www.linuxmi.com/sweet-home-3d-6-4.html 免费3D室内设计软件Swe ...

  7. linux 路由器软件,用Zebra打造Linux下小型路由器(图)

    首先编辑ifcfg-eth0,让它的地址为192.168.1.1, 详细内容如下: [root@rhel5~]#vi /etc/sysconfig/network-scripts/ifcfg-eth0 ...

  8. linux开源软件推荐,10个Linux平台开源ERP软件推荐

    10个最好的自由Linux平台Enterprise Resource Planning (ERP) 软件.经常关注开源软件的朋友,或经常访问Sourceforge.net.apache.org等网站的 ...

  9. linux检测软件温度,如何在Linux系统上监测系统温度?(亲测可用)

    转载自:http://os.51cto.com/art/201311/417208.htm 按理说,在大多数情况下,你用不着为电脑的运行温度而操心.除了制造瑕疵外,电脑硬件在设计时确保温度不会超过最高 ...

最新文章

  1. squid与varnish
  2. 第十七届智能汽车竞赛-多车编队组入门讲解
  3. framework层和native层实现联网控制(iptable方式)
  4. torchvision.transforms包的使用
  5. CentOS 6安装详解及PXE 安装
  6. IOS 手机助手及越狱助手推荐
  7. (转)VC++多线程编程
  8. python输出unicode字符_如何在Python中打印Unicode字符?
  9. Matlab中的数据预处理-归一化(mapminmax)
  10. ARM-Linux移植中文输入法 IMX6Q
  11. [原创]AM3352 + TPS65910 调试方法+调试记录
  12. WinSock IO模型五: 完成端口
  13. Promethus(普罗米修斯)监控
  14. apache-ant-1.7 下载
  15. java监听服务器信息,java实时监控服务器状态
  16. nim语言编译后的c语言,Nim的编译方法
  17. Homework02
  18. 干活的干不过写PPT的 新东方年会吐槽奖金追加至12万-千氪
  19. 感悟·随笔·自弹自唱
  20. 诺维信任命陈晓慧女士为中国区新总裁

热门文章

  1. vue如何使用原生js写动画效果_原生js写一个无缝轮播图插件(支持vue)
  2. linux 进程间通信 dbus-glib【实例】详解三 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象、object) 等 )(附代码)
  3. 20190812_Intel Realsense D435 关于摄像头USB掉线问题问题记录汇总
  4. Train Wreck 模拟-建树-优先队列
  5. java 表单请求_java模拟表单请求
  6. usb 由于计算机限制,电脑usb被限制了怎么办
  7. 下列哪个适合做链栈_很多朋友在问:多层实木生态板和颗粒板哪个更适合做衣柜呢?...
  8. python程序格式框架的描述_python 程序语言设计(嵩天)-学习笔记(第二章python 程序实例解析)...
  9. C++ VS2017 QT5.12开发在xp环境下运行 [2019]亲测推荐
  10. java的调试工具_2020年最佳Java调试工具(翻译)