gpt4 book ai didi

c - 何时使用 HANDLE_EINTR 或 HANDLE_EAGAIN?

转载 作者:IT王子 更新时间:2023-10-29 00:44:43 25 4
gpt4 key购买 nike

我正在用 C 编写 Web 服务器,我经常使用系统调用,在错误时返回 -1 并将“errno”变量设置为适当的值。一些系统调用可以返回 EINTR 和/或 EAGAIN。我有两个包装器 HANDLE_EINTR、HANDLE_EAGAIN,它们使用这两个错误值并重试系统调用。

如果系统调用返回 EINTR 和/或 EAGAIN,手册页通常会提及,但对于某些系统调用,它确实不会。此外,一些系统调用可能不会直接返回 EINTR/EAGAIN,而是通过可能在其中使用的其他系统调用失败。

我想问一下我是否可以使用 HANDLE_EINTR 和/或 HANDLE_EAGAIN 而不管 API 声明的内容(并不总是完整的)。

此外,我从 Google 人员那里了解到,将 HANDLE_EINTR 与“关闭”系统调用一起使用(尽管 API 提到使用它)不是一个好主意,所以我没有使用它。是否有任何其他系统调用具有此行为?

谢谢。

最佳答案

EINTREAGAIN 的语义定义明确。如果特定的系统调用没有被记录为可能返回特定的 errno,那么为它设置一个处理程序也没有什么坏处。

对于大型应用程序来说,实现一个错误处理程序来对范围广泛的 errno 采取适当的操作并使用相同的错误处理程序来适本地处理来自许多不同系统调用的错误条件是很常见的,即使特定的系统调用可能未记录为可能返回特定的 errno

关于c - 何时使用 HANDLE_EINTR 或 HANDLE_EAGAIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25709056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com