iOS—-SIGPIPE信号终止进程[通俗易懂]
2023-06-13 09:12:27 时间
大家好,又见面了,我是你们的朋友全栈君。
#概念: 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.cn/160810.html原文链接:https://javaforall.cn
相关文章
- iOS小技能:封装银联接口协议(收银台的订单退款、查询机制)【上篇】
- iOS 获取本地图片尺寸_ios图片处理软件
- iOS | Xcode打包和发版
- IOS – OpenGL ES 图像晕影移动 GPUImageVignetteFilter
- IOS 上传IPA到AppStore
- 让你快速创建 iOS 7 图标的模板资源
- iOS开发中GCD在多线程方面的理解详解手机开发
- ios 获取网络类型详解手机开发
- ios基础:iOS改变状态栏字体颜色详解手机开发
- Linux与iOS之间的技术对比(linux和ios)
- Linux与iOS:越来越亲密的合作伙伴(linux与ios)
- 苹果在iOS 14.5中更新注射器表情符号 代表疫苗接种、献血等
- Linux下安装iOS:解决方案(linux安装ios)
- 基于Linux环境下iOS应用开发实践(linux下开发ios)
- 平台开发iOS开发:基于Linux平台的世界(ios基于linux)
- iOS开发与Linux的技术融合(ios开发linux)
- 2017 年 Windows 将被苹果 iOS/OS X 超越,沦为第三大操作系统
- iOS 限免 App 精选:天气工具《ONE METEO》(¥30→0)
- iOS和Linux:共同推动互联网时代的进程(ioslinux)
- 探秘iOS:它究竟是一种基于Linux的操作系统吗?(ios是linux系统吗)
- 移动端iOS技术实现Oracle数据库连接(ios联接oracle)
- iOS 轻松登录 Oracle 数据库(ios 登陆oracle)
- iOS系统下的Oracle数据库环境(ios oracle)
- Reddit用户发现CSAM检测中使用的苹果NeuralHash算法隐藏在iOS 14.3中