1. 问题描述:
客户端send函数的时候,偶尔导致程序崩溃。
2. 原因:
在linux下写socket的程序的时候,如果尝试send到一个disconnected socket上,就会让底层抛出一个SIGPIPE信号,这个信号的缺省处理方法是退出进程。
3. 解决办法:
1)client中忽略SIGPIPE信号
signal(SIGPIPE, SIG_IGN);
2)阻止SIGPIPE信号
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGPIPE);
sigprocmask(SIG_BLOCK, &set, NULL);
3)为SIGPIPE添加信号处理函数
signal(SIGPIPE, pipesig_handler);