首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C- recvfrom和signal

C- recvfrom和signal
EN

Stack Overflow用户
提问于 2012-11-18 16:33:44
回答 2查看 4.1K关注 0票数 2

我想要处理SIGUSR1信号,所以我做了它需要的一切,并且它正在工作。但在我的程序中,我在recvfrom等待,当我处理信号并返回到recvfrom时,我从这个函数得到了-1。是否有可能返回到此函数等待?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-18 16:38:50

你的系统调用正在被信号interrupted。除非您一直使用带有SA_RESTART标志的sigaction设置信号处理程序,否则最好使用如下循环重试系统调用:

代码语言:javascript
复制
while ((size = recvfrom(...)) == -1 && errno == EINTR)
  ;
票数 4
EN

Stack Overflow用户

发布于 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),除非在套接字上设置了超时(如下所示)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13438634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档