- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在用 C 编写 Web 服务器,我经常使用系统调用,在错误时返回 -1 并将“errno”变量设置为适当的值。一些系统调用可以返回 EINTR 和/或 EAGAIN。我有两个包装器 HANDLE_EINTR、HANDLE_EAGAIN,它们使用这两个错误值并重试系统调用。
如果系统调用返回 EINTR 和/或 EAGAIN,手册页通常会提及,但对于某些系统调用,它确实不会。此外,一些系统调用可能不会直接返回 EINTR/EAGAIN,而是通过可能在其中使用的其他系统调用失败。
我想问一下我是否可以使用 HANDLE_EINTR 和/或 HANDLE_EAGAIN 而不管 API 声明的内容(并不总是完整的)。
此外,我从 Google 人员那里了解到,将 HANDLE_EINTR 与“关闭”系统调用一起使用(尽管 API 提到使用它)不是一个好主意,所以我没有使用它。是否有任何其他系统调用具有此行为?
谢谢。
最佳答案
EINTR
和EAGAIN
的语义定义明确。如果特定的系统调用没有被记录为可能返回特定的 errno
,那么为它设置一个处理程序也没有什么坏处。
对于大型应用程序来说,实现一个错误处理程序来对范围广泛的 errno
采取适当的操作并使用相同的错误处理程序来适本地处理来自许多不同系统调用的错误条件是很常见的,即使特定的系统调用可能未记录为可能返回特定的 errno
。
关于c - 何时使用 HANDLE_EINTR 或 HANDLE_EAGAIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25709056/
我正在用 C 编写 Web 服务器,我经常使用系统调用,在错误时返回 -1 并将“errno”变量设置为适当的值。一些系统调用可以返回 EINTR 和/或 EAGAIN。我有两个包装器 HANDLE_
我是一名优秀的程序员,十分优秀!