Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1175835
  • 博文数量: 221
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2139
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-27 19:53
个人简介

JustForFun

文章分类

全部博文(221)

文章存档

2024年(6)

2023年(8)

2022年(2)

2021年(2)

2020年(29)

2019年(11)

2018年(23)

2017年(41)

2016年(76)

2015年(23)

我的朋友
最近访客

分类: LINUX

2017-07-11 20:09:04

博客原文http://blog.csdn.net/wangzhongzheneasy/article/details/10927087
现有客户端A和服务器端B,服务器端B接受A的TCP连接请求建立连接,客户端A持续向服务器端发送数据。服务器端终止与客户端A的连接。客户端在某次发送数据失败后程序异常退出。

当一个进程向某个已收到RST的套接字执行写操作时,内核向该进程发送一个SIGPIPE信号。该信号的默认行为是终止进程,因此进程必须捕获它以免不情愿的被终止。

  更具体的说就是在客户端收到服务器端的FIN结束符以后,当客户端再次向服务器端发送数据时,服务器端会返回一个RST消息,程序调用则会返回一个ECONNRESET错误,但这并不会导致程序异常退出。当下一次再尝试写入数据的时候,将会导致内核产生一个SIGPIPE信号,在没有对该信号进行捕获的情况下,SIGPIPE信号将采用默认行为,即终止进程,所以才会产生客户端诡异的终止掉。

    知道了原因,解决问题就很容易了,只要捕获该信号或者将该信号的信号处理设置为SIG_IGN就可以啦。

阅读(1383) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~