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下重启oracle的方法

    linux下重启oracle的方法

    2021年9月14日
    53
  • 基于android 社会的app短信分享 发送回调事件的实现

    基于android 社会的app短信分享 发送回调事件的实现

    2022年1月11日
    48
  • python元组添加元素_Python 元组_python元组操作_添加元素_python 元组转字符串

    python元组添加元素_Python 元组_python元组操作_添加元素_python 元组转字符串Python 元组 Python 的元组与列表类似 不同之处在于元组的元素不能修改 元组使用小括号 列表使用方括号 元组创建很简单 只需要在括号中添加元素 并使用逗号隔开即可 如下实例 tup1 physics chemistry 1997 2000 tup2 1 2 3 4 5 tup3 a b c d 创建空元组 tup1

    2026年1月22日
    1
  • discuz 二次开发后台调用编辑器的方法![通俗易懂]

    discuz 二次开发后台调用编辑器的方法![通俗易懂]纠结了两个晚上,一个白天,无数次的Google,无数次的baidu,依旧没搜到合理的方案,奇怪难道没人有这个需求吗??好在功夫不负有心人,终于解决了!但是有个缺憾是无法使用图片上传功能。。但是也算不错了!有谁能解决得了这个图片上传的功能,还请分享~~~下面分享一下解决方法!showtablerow(”,array(‘class=”td27″‘,’class=”td28″‘),

    2022年5月12日
    38
  • 推荐top10的免费下载激活成功教程软件的网站

    推荐top10的免费下载激活成功教程软件的网站Z2ER资源网站Windows绝赞应用爱软客|专注常用软件绿色版、优化版、便携版精品绿色便携软件PortableAppC开心软件园-软件资讯、下载及使用交流Yanu-分享优秀、纯净、绿色、实用的精品软件。ChromeGAE唯一官方网站首页-大软坊-绿色数字未来|DigitalFuture产品类别Windows|极致分享Uptodow…

    2022年10月13日
    5
  • 三分钟明白 Activiti工作流 — java运用[通俗易懂]

    三分钟明白 Activiti工作流 — java运用[通俗易懂]一、什么是工作流以请假为例,现在大多数公司的请假流程是这样的员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑采用工作流技术的公司的请假流程是这样的员工使用账户登录系统——点击请假——上级登录系统点击允许就这样,一个请假流程就结束了有人会问,那上级不用向公司提交请假记录?公司不用将记录录入电脑…

    2022年4月30日
    114

发表回复

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

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