我写了一个小小的httpd。但是,如果我在短时间内向httpd发送了许多请求,httpd就会因为SIGPIPE而退出。
在Google上搜索之后,我添加
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"); 和
send(fd, buf, strlen(buf), MSG_NOSIGNAL);以防止SIGPIPE。
但是由于SIGPIPE,httpd仍然退出。
有人能帮我解决这个问题吗?
我的代码:
发布于 2018-04-04 18:47:25
通常的方法是忽略SIGPIPE (signal(SIGPIPE, SIG_IGN); --您说已经完成了),然后仔细检查每个写和发送调用,以确保正确地检查返回值,并处理所得到的任何EPIPE (或其他)错误。
忽略SIGPIPE的危险在于,很容易得到一个程序,它不需要写到一个封闭的连接,就可以忽略错误,并且永远不会终止。
一旦您忽略了SIGPIPE,您的程序就不会因为SIGPIPE而退出。
https://stackoverflow.com/questions/49655198
复制相似问题