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;//设置标志并在主程序中检查此标志