首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止多线程程序中的SIGPIPE?

如何防止多线程程序中的SIGPIPE?
EN

Stack Overflow用户
提问于 2018-04-04 15:40:37
回答 1查看 552关注 0票数 0

我写了一个小小的httpd。但是,如果我在短时间内向httpd发送了许多请求,httpd就会因为SIGPIPE而退出。

在Google上搜索之后,我添加

代码语言:javascript
复制
signal(SIGPIPE, SIG_IGN);
sigset_t signal_mask; 
sigemptyset(&signal_mask); 
sigaddset(&signal_mask, SIGPIPE); 
if(pthread_sigmask(SIG_BLOCK, &signal_mask, NULL) == -1) 
perror("SIGPIPE"); 

代码语言:javascript
复制
send(fd, buf, strlen(buf), MSG_NOSIGNAL);

以防止SIGPIPE。

但是由于SIGPIPE,httpd仍然退出。

有人能帮我解决这个问题吗?

我的代码:

httpd.c

threadpool.c

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-04 18:47:25

通常的方法是忽略SIGPIPE (signal(SIGPIPE, SIG_IGN); --您说已经完成了),然后仔细检查每个写和发送调用,以确保正确地检查返回值,并处理所得到的任何EPIPE (或其他)错误。

忽略SIGPIPE的危险在于,很容易得到一个程序,它不需要写到一个封闭的连接,就可以忽略错误,并且永远不会终止。

一旦您忽略了SIGPIPE,您的程序就不会因为SIGPIPE而退出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49655198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档