【发布时间】:2016-03-23 00:03:55
【问题描述】:
我必须处理 SIGHUP 和 SIGPIPE 信号,以避免通过 Socket TCP 连接的 CLIENT 关闭终端(GUI 的 [X])没有关闭或崩溃 SERVER。
我已经在客户端上设置了这样的 sigup 处理程序
void sighup()
{
signal(SIGHUP, SIG_IGN);
system("echo SIGHUP received>>log.txt");
close(socket);
exit(0);
}
在服务器上我设置了这样的 SIGPIPE 处理程序
signal(SIGPIPE,SIG_IGN);
但是,如果客户端关闭了终端的窗口,服务器就会循环。
有什么想法吗? 总之谢谢大家的支持
【问题讨论】:
-
循环为什么/如何?你在这里没有真正提供足够的信息。我不得不猜测,一旦套接字被破坏,在套接字上进行的读或写调用总是会立即返回,因为现在读/写是一个错误。您需要检测到这一点并丢弃套接字或采取任何适当的措施......如果这就是正在发生的事情......
-
如果忽略 SIGPIPE,写入操作将返回错误设置
errno到EINTR。只要您始终如一地仔细测试您的写入操作是否成功(并在它们不成功时采取适当的措施——这意味着停止尝试写入),这很有用。否则,这就是灾难的根源。 -
我犯了一个错误,我将把所有的写入和读取指令都检查为 perror。但是,无论如何,这是处理这种情况的正确方法吗?客户端关闭终端服务器需要继续你有什么建议给我吗?谢谢