免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3769 | 回复: 10
打印 上一主题 下一主题

SIGPIPE信号的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-17 09:57 |只看该作者 |倒序浏览
在一个程序中只需要设置一次sigpipe信号,还是每次调用socket的时候都需要设置一次sigpipe?

程序会多次调用socket

论坛徽章:
0
2 [报告]
发表于 2008-08-17 10:00 |只看该作者
一次就够了

论坛徽章:
0
3 [报告]
发表于 2008-08-17 10:02 |只看该作者
只需要设置一次sigpipe信号,但如果关闭连接后重新链接,那就要再设置一次

论坛徽章:
0
4 [报告]
发表于 2008-08-17 10:04 |只看该作者
那也就是说在mian里面写一次就行了,
不用在获取数据的函数里面写? 获取数据的函数 里使用了socket

如果在获取数据的函数里面写,会不会有什么问题?

论坛徽章:
0
5 [报告]
发表于 2008-08-17 10:07 |只看该作者
int main(int argc, char **argv)
{
    //  1
     while(1)
         s();
}
void s()
{
   // 2
   ......
   socket(...);
   // 3
   .........
   close(..);
}

下面的这段代码应该放在1,还是2,还是3?
struct sigaction siga;
siga.sa_handler = SIG_IGN;
sigaction(SIGPIPE,&siga,0);

论坛徽章:
0
6 [报告]
发表于 2008-08-17 10:13 |只看该作者
原帖由 qliu00 于 2008-8-17 10:02 发表
只需要设置一次sigpipe信号,但如果关闭连接后重新链接,那就要再设置一次


信号应该是对整个进程的吧?

论坛徽章:
0
7 [报告]
发表于 2008-08-17 10:17 |只看该作者
应该是放在mian里面

论坛徽章:
0
8 [报告]
发表于 2008-08-17 11:04 |只看该作者
一次

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
9 [报告]
发表于 2008-08-17 12:33 |只看该作者
原帖由 kingwkb 于 2008-8-17 10:07 发表
int main(int argc, char **argv)
{
    //  1
     while(1)
         s();
}
void s()
{
   // 2
   ......
   socket(...);
   // 3
   .........
   close(..);
}

下面的这段代码应该放在 ...


只需要设置一次,在main做其它初始化之前最好就设置信号处理方式,如果你是多线程程序,在产生这些线程前设置,信号action是进程级,线程都有自身的信号mask。如果你需要用信号做些复杂的事情,还是认真参考下APUE的SIGNAL章节,讲解非常清楚,可以解决你这方面很多疑惑,避免一些莫名奇妙的问题。

论坛徽章:
0
10 [报告]
发表于 2008-08-17 12:38 |只看该作者
线程+信号是比较复杂的,很容易出问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP