【发布时间】:2014-11-03 11:52:52
【问题描述】:
我正在尝试使用信号处理程序实现一个简单的服务器/客户端。
我对信号的唯一用途是 sigaction(SIG...,&sig,NULL),其中:
sig.sa_sigaction = &closeSig;
sig.sa_flags = SA_SIGINFO;
void closeSig{
send(ds_sock,"close",1024,0);
close(ds_sock);
exit(1);
}
如果服务器(或客户端)收到“关闭”,它只是关闭连接。
在这种情况下,使用sigset_t是否有用,并在其中添加我想要处理的所有信号,然后使用像up这样的sigaction,而不是只使用e sigaction?
如果有用,能解释一下原因吗?我有一个测试版程序,它在服务器上使用了一个 sigset,但它不在客户端上。谢谢!
编辑:我刚刚发现服务器还使用 sigprocmask 和 unblock。如果我不想使用它,并且我希望所有信号都被解除阻塞并且他们立即启动他们的处理程序,我不必使用 sigset,对吗?谢谢!
抱歉,我无法发布代码。如果你能帮助我,那很好,如果你不能,无论如何,谢谢!
【问题讨论】:
-
你的 send() 调用没有意义;它从一个 5 字节数组中发送 1024 个字节。我希望这只是一个例子。
-
@Myria 是的,这只是一个例子,现在是早上 6 点,我还在学习 :( 编辑:无论如何,我不认为这是完全错误的,我的意思是,我发送的字节数比必要的多,但这应该不会破坏任何东西,对吧?
-
读取数组末尾有未定义的效果。它可能什么都不做,它可能导致核心转储,或者它可能做其他事情。