C 将信号当作错误处理
您好,我正在编写一个线程套接字程序,该程序可能会收到一个C 将信号当作错误处理,c,sockets,signals,C,Sockets,Signals,您好,我正在编写一个线程套接字程序,该程序可能会收到一个SIGPIPE信号并将退出,如果我捕获该信号并忽略它,该程序将具有未定义的行为,因为我不知道如何将其作为错误处理,我如何捕捉信号并通知代码的当前位置,它需要从带有错误代码的函数返回,以便程序流继续正常运行,我想威胁SIGPIPE,因为它在读/写系统调用中是错误的,因为我知道在收到读/写错误时如何处理它们 { signal(SIGPIPE,sig_handler); } void sig_handler(int signo) {
SIGPIPE
信号并将退出,如果我捕获该信号并忽略它,该程序将具有未定义的行为,因为我不知道如何将其作为错误处理,我如何捕捉信号并通知代码的当前位置,它需要从带有错误代码的函数返回,以便程序流继续正常运行,我想威胁SIGPIPE
,因为它在读/写系统调用中是错误的,因为我知道在收到读/写错误时如何处理它们
{
signal(SIGPIPE,sig_handler);
}
void sig_handler(int signo)
{
if (signo == SIGPIPE){
printf("hi\n");
}
}
如果您想忽略SIGPIPE并直接在代码中处理错误。 但是C语言中的信号处理程序有很多限制。 最简单的方法是将SIGPIPE处理程序设置为SIG_IGN。这将防止任何套接字写入导致SIGPPIPE信号。 要忽略SIGPIPE信号,请使用以下代码:
signal(SIGPIPE, SIG_IGN);
或
要处理此问题,请尝试以下操作:
#include <signal.h>
/* Catch Signal Handler functio */
void signal_handler(int signum)
{
printf("Caught signal SIGPIPE %d\n",signum);
}
另一种方法是在创建套接字时设置套接字选项:更改套接字,使其永远不会在write()上生成SIGPIPE
如果您想忽略SIGPIPE并直接在代码中处理错误。 但是C语言中的信号处理程序有很多限制。 最简单的方法是将SIGPIPE处理程序设置为SIG_IGN。这将防止任何套接字写入导致SIGPPIPE信号。 要忽略SIGPIPE信号,请使用以下代码:
signal(SIGPIPE, SIG_IGN);
或
要处理此问题,请尝试以下操作:
#include <signal.h>
/* Catch Signal Handler functio */
void signal_handler(int signum)
{
printf("Caught signal SIGPIPE %d\n",signum);
}
另一种方法是在创建套接字时设置套接字选项:更改套接字,使其永远不会在write()上生成SIGPIPE
您不应该从信号处理程序中调用printf()。我们可以在信号处理程序中设置一个标志,并可以在主程序中监视该标志。例如:声明此标志globly static int alarm=0;在信号处理器中:报警=1;//设置标志并在主程序中检查此标志您不应该从信号处理程序中调用printf()。我们可以在信号处理程序中设置标志,并可以在主程序中监视该标志。例如:声明此标志globly static int alarm=0;在信号处理器中:报警=1;//设置标志并在主程序中检查此标志