iOS—-SIGPIPE信号终止进程[通俗易懂]

iOS—-SIGPIPE信号终止进程[通俗易懂]#概念:SIGPIPE,当一个程序a调用send函数向一个服务A发送信号的数据,服务A在接收数据的时候突然挂掉、无法接收数据、没有接收者,那么内核就会发送一个SIGPIPE信号,从而中断进程,导致程序退出。#调用signal(SIGPIPE,SIG_IGN);对一个已经收到FIN包的socket调用read方法,如果接收缓冲已空,则返回0,这就是常说的表示连接关闭.但第一次对其调用…

大家好,又见面了,我是你们的朋友全栈君。

#概念:
SIGPIPE,当一个程序a调用send函数向一个服务A发送信号的数据,服务A在接收数据的时候突然挂掉、无法接收数据、没有接收者,那么内核就会发送一个SIGPIPE信号,从而中断进程,导致程序退出。

#调用signal(SIGPIPE, SIG_IGN);

对一个已经收到FIN包的socket调用read方法,
如果接收缓冲已空, 则返回0, 这就是常说的表示连接关闭. 但第一次对其调用write方法时, 如果发送缓冲没问题, 会返回正确写入(发送).
但发送的报文会导致对端发送RST报文, 因为对端的socket已经调用了close, 完全关闭, 既不发送, 也不接收数据. 所以,
第二次调用write方法(假设在收到RST之后), 会生成SIGPIPE信号, 导致进程退出.
为了避免进程退出, 可以捕获SIGPIPE信号, 或者忽略它, 给它设置SIG_IGN信号处理函数:
signal(SIGPIPE, SIG_IGN);
这样, 第二次调用write方法时, 会返回-1, 同时errno置为SIGPIPE. 程序便能知道对端已经关闭.

#总结
signal(SIGPIPE, SIG_IGN)的作用就是防止程序收到SIGPIPE后自动退出。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160810.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 解Linux SSH命令大全,新手必看SSH命令

    解Linux SSH命令大全,新手必看SSH命令

    2021年9月22日
    49
  • Linux(笔记)[通俗易懂]

    Linux(笔记)[通俗易懂]开启端口时,宝塔面板和阿里云都要开启简介我们为什么要学习Linuxlinux诞生了这么多年,以前还喊着如何能取代windows系统,现在这个口号已经小多了,任何事物发展都有其局限性都有其天花板。就如同在国内再搞一个社交软件取代腾讯一样,想想而已基本不可能,因为用户已经习惯于使用微信交流,不是说技术上实现不了解而是老百姓已经习惯了,想让他们不用,即使他们自己不用亲戚朋友还是要用,没有办法的事情。用习惯了windows操作系统,再让大家切换到别的操作系统基本上是不可能的事情,改变一个人已经养成的习惯

    2022年6月5日
    21
  • allegro转pads方法_pads原理图转cadence

    allegro转pads方法_pads原理图转cadence1、首先电脑上安装好三个软件。我的是AD21、Cadence16.6、PADS9.52、先把BRD文件用AD21直接导入,AD21支持直接导入BRD文件的,然后导出低版本AD即可。3、再用PADS9.5安装自带的一个转换功率,叫PADSTanslation,直接导入AD低版本文件转换出PADS的文件即可。…

    2025年8月22日
    3
  • linux系添加路由,Linux添加路由的两种方法「建议收藏」

    linux系添加路由,Linux添加路由的两种方法「建议收藏」Linux中增加软路由的两种方法第一种:routeadd-net172.16.6.0netmask255.255.255.0gw172.16.2.254deveth0/*增加一条网络172.16.6.0/24经过172.16.2.254eth0*//*-net增加网络-host增加主机netmask子网掩码gw网关dev装置,设备,这里是你的网卡名*/ro…

    2022年10月5日
    3
  • Linux用netstat查看服务及监听端口详解

    Linux用netstat查看服务及监听端口详解在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询netstat命令各个参数说明如下:-a或–all显示所有连线中的Socket。-A<网络类型>或–…

    2022年7月23日
    9
  • Java开发SDK详解->SDK开发

    Java开发SDK详解->SDK开发一、前言前面已经将服务端开发好了(服务端开发),现在我们来开发SDK吧。二、详情2.1创建项目创建一个普通的maven项目maven—-》jdk选择1.8—–》next输入groupId和artifactId输入项目名称,和项目存放位置2.2开发代码先看看项目的整体结构2.2.1pom文件依赖的jar包<dependencies><!–json相关–><dependency>&l

    2022年7月8日
    211

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号