我想要处理SIGUSR1信号,所以我做了它需要的一切,并且它正在工作。但在我的程序中,我在recvfrom等待,当我处理信号并返回到recvfrom时,我从这个函数得到了-1。是否有可能返回到此函数等待?
发布于 2012-11-18 16:38:50
你的系统调用正在被信号interrupted。除非您一直使用带有SA_RESTART标志的sigaction设置信号处理程序,否则最好使用如下循环重试系统调用:
while ((size = recvfrom(...)) == -1 && errno == EINTR)
;发布于 2012-11-18 16:36:39
它应该返回-1并将errno设置为EINTR,然后您应该尝试再次调用它,或者在设置信号处理程序时使用SA_RESTART标志,这应该允许recvfrom在被信号中断时重新启动。
从man signal(7)页面:
如果对以下接口的阻塞调用被信号处理程序中断,,则在信号处理程序返回后,如果使用了SA_RESTART标志,则调用将自动重新启动;否则调用将失败,并显示错误EINTR:
套接字接口: accept(2)、connect(2)、recv(2)、recvfrom(2)、recvmsg(2)、send(2)、sendto(2)和sendmsg(2),除非在套接字上设置了超时(如下所示)
https://stackoverflow.com/questions/13438634
复制相似问题