Linux SIGPIPE信号产生原因与解决方法

Linux SIGPIPE信号产生原因与解决方法TCP四次握手产生SIGPIPE的原因SIGPIPE信号产生的原因:简单来说,就是客户端程序向服务器端程序发送了消息,然后关闭客户端,服务器端返回消息的时候就会收到内核给的SIGPIPE信号。TCP的全双工信道其实是两条单工信道,client端调用close的时候,虽然本意是关闭两条信道,但是其实只能关闭它发送的那一条单工信道,还是可以接受数据,server端还是可以发送…

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

TCP 四次握手

这里写图片描述

产生SIGPIPE的原因

SIGPIPE信号产生的原因:
简单来说,就是客户端程序向服务器端程序发送了消息,然后关闭客户端,服务器端返回消息的时候就会收到内核给的SIGPIPE信号。
TCP的全双工信道其实是两条单工信道,client端调用close的时候,虽然本意是关闭两条信道,但是其实只能关闭它发送的那一条单工信道,还是可以接受数据,server端还是可以发送数据,并不知道client端已经完全关闭了。
以下为引用:
”’对一个已经收到FIN包的socket调用read方法, 如果接收缓冲已空, 则返回0, 这就是常说的表示连接关闭. 但第一次对其调用write方法时, 如果发送缓冲没问题, 会返回正确写入(发送). 但发送的报文会导致对端发送RST报文, 因为对端的socket已经调用了close, 完全关闭, 既不发送, 也不接收数据. 所以, 第二次调用write方法(假设在收到RST之后), 会生成SIGPIPE信号, 导致进程退出.”’
这里写图片描述

RST报文:
以下几种情况会产生RST
1)CLOSE状态的socket收到任何数据都会返回RST,即为我遇到的情况
其他参见RFC793 tcp协议
这里写图片描述

解决方法

#include <signal.h>
void handle_pipe(int sig)
{
//do nothing
}
int main()
{
    struct sigaction sa;
    sa.sa_handler = handle_pipe;
    sigemptyset(&sa.sa_mask);
    sa.sa_flags = 0;
    sigaction(SIGPIPE,&sa,NULL);
//do something
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • 从零开始学习Prometheus监控报警系统[通俗易懂]

    从零开始学习Prometheus监控报警系统[通俗易懂]Prometheus是一个开源的监控报警系统,它被纳入了由谷歌发起的Linux基金会旗下的云原生基金会,并成为仅次于Kubernetes的第二大开源项目。

    2022年6月3日
    34
  • Java 编码转换_java 判断文件编码

    Java 编码转换_java 判断文件编码中文各种编码间互相转换,非常有用哦,借鉴了公司的资料,转载本人不负任何责任,呵呵主要是用hcutf8.txt里面的内容根据转码替换,呵呵packageencoding;importjava.io.BufferedReader;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.Unsupporte

    2022年8月22日
    8
  • 网页自动化操作之-全自动下单(淘宝/天猫)

    网页自动化操作之-全自动下单(淘宝/天猫)声明:本博客所有软件不含任何恶意代码,请放心使用QQ/微信112908676最新下载地址https://webcrawl.lanzous.com/b0dvn942d密码:htig旧版2019.11.08版本2.4.3,下载地址:https://www.lanzous.com/i785doh下载结束如遇360弹出压缩包解密提醒,请直接取消忽略操作视频2019.03.07更新优酷:https://v.youku.com/v_show/id_XNDA4OTE2O.

    2022年5月20日
    42
  • 安装黑群晖找不到局域网电脑_黑群晖洗白太复杂?我用蒲公英P5轻松实现「建议收藏」

    安装黑群晖找不到局域网电脑_黑群晖洗白太复杂?我用蒲公英P5轻松实现「建议收藏」前言:随着网盘时代的结束,剩下的网盘供应商又开启了垄断方式,所以越来越多的小伙伴开始自己组自己的家庭NAS网络存储服务器。比如笔者的一个好基友就是如此。其实开始笔者是想让他直接一步到位,买群晖或者铁威马的NAS,在放入硬盘就可“一劳永逸”。然而,这个小伙伴看到了某鱼上有很多星际蜗牛这样的洋垃圾,所以搞了一台回来。付出了一顿小龙虾后,笔者帮其装好黑群晖后,不过依旧只能半洗白状态,刚好笔者有一个新玩具…

    2022年6月10日
    115
  • 创建选区快捷键是什么_Photoshop选区操作的快捷键

    创建选区快捷键是什么_Photoshop选区操作的快捷键1.使用快捷键快速操作.F1-帮助F2-剪切F3-拷贝F4-粘贴F5-隐藏/显示画笔面板F6-隐藏/显示颜色面板F7-隐藏/显示图层面板F8-隐藏/显示信息面板F9-隐藏/显示动作面板F12-恢复Shift+f5-填充Shift+f6-羽化Shift+f7-选择→反选ctrl+h-隐藏选定区域ctrl+d-取消选定区域ctrl+w-关闭文件ctrl+Q-退出PHOTOSHOPEsc-取消操作…

    2022年6月15日
    76
  • Urllib库的基本用法

    Urllib库的基本用法

    2021年11月19日
    43

发表回复

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

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