有没有专家可以帮助我解决以下问题?
我在 C 中有以下系统调用:
access()
unlink()
setsockopt()
fcntl()
setsid()
socket()
bind()
listen()
我想知道它们是否会因错误代码 -1 和错误号 EINTR/EAGAIN 而失败。
我应该为这些处理 EINTR/EAGAIN 吗?
该文档没有提到与 EINTR/EAGAIN 相关的任何内容,但我看到很多人处理它。
哪个是正确的?
这是我注册信号处理程序的方式:https://gitorious.org/zepto-web-server/zepto-web-server/source/b1b03b9ecccfe9646e34caf3eb04689e2bbc54dd:src/signal-dispatcher-utility.c
这里还有一个提交,我在一些我知道返回 EINTR 或 EAGAIN 的系统调用中添加了一些 EINTR/EAGAIN 处理:https://gitorious.org/zepto-web-server/zepto-web-server/commit/b1b03b9ecccfe9646e34caf3eb04689e2bbc54dd
最佳答案
除非你安装了一个中断信号处理程序(一个安装了 sigaction
省略了 SA_RESTART
标志,或者一个安装了 signal
功能在一些系统),你不应该期望看到 EINTR
。
在您的特定函数列表中,除了 fcntl
之外,我没有看到任何可以体验 EINTR
的函数,并且仅当它用于锁定时。不过,John 的回答中的链接应该有助于回答有关特定功能的问题。
关于c - 系统调用和 EINTR 错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25729901/