Chinaunix首页 | 论坛 | 博客
  • 博客访问: 293368
  • 博文数量: 71
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 564
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-20 18:15
个人简介

用编程改变大众。。。

文章分类

全部博文(71)

文章存档

2016年(7)

2015年(54)

2014年(10)

我的朋友

分类: C/C++

2016-03-15 14:19:44

    socket编程中经常会遇到这样一种情况:客户端已经连接上服务器,当服务器异常退出时,会导致客户端也异常退出。
分析原因如下:客户端连接上服务器后,服务器会给其分配一个单独的socket来与之通信。当服务器异常退出时,该socket也会被异常销毁。因此客户端在不知情的情况下会照常向服务器发送消息,一旦发送失败并且接收到SIGPIPE信号时,此信号的默认响应便是使进程退出,因此该客户端进程就异常退出了。
    有时候需要要求进程不能异常退出时,即当进程接收到SIGPIPE信号时,得做出相应的处理而不是系统默认的异常退出,解决方法有很多,最有效的做法是拦截该信号并做出合适的处理,以下几种常用的做法可供参考:
1、直接忽略该信号
signal(SIGPIPE, SIG_IGN);
2、重载该信号的响应事件
void processSignal(int signo)
{
    do somethings ...;
}

signal( SIGPIPE, processSignal) ;

将此拦截SIGPIPE信号的处理部分放在进程执行的起始位置,便可达到拦截的效果,而不会出现客户端自动退出的现象了。
阅读(2058) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~