Я пишу веб-сервер в C, и я часто использую системные вызовы, которые при ошибке возвращают -1 и устанавливают переменную «errno» соответствующее значение. Некоторые системные вызовы могут возвращать EINTR и/или EAGAIN. У меня есть две оболочки HANDLE_EINTR, HANDLE_EAGAIN, которые используют оба эти значения ошибки и повторите системный вызов.Когда использовать HANDLE_EINTR или HANDLE_EAGAIN?
Страницы руководства обычно ссылаются, если системный вызов возвращает EINTR и/или EAGAIN, но для некоторых системных вызовов это действительно не так. Также некоторые системные вызовы могут возвращать EINTR/EAGAIN не напрямую, а через сбой других системных вызовов, которые могут быть использованы в нем.
Я хотел бы спросить, могу ли я использовать HANDLE_EINTR и/или HANDLE_EAGAIN независимо от того, что объявляет API (что не всегда полно).
Кроме того, я знаю из людей Google, что использование HANDLE_EINTR с системным вызовом «закрыть» (хотя API-интерфейс используется для его использования) не является хорошей идеей, поэтому я не использую его. Существуют ли другие системные вызовы, которые имеют такое поведение?
спасибо.
Почему, по-вашему, повторная попытка вызова системы SASSAL после EAGAIN - хорошая идея? –
Можно ли использовать HANDLE_EINTR и HANDLE_EAGAIN для всех системных вызовов независимо от API? –
Невозможно равномерно обрабатывать EAGAIN. Это либо нормальное состояние, сходное с EOF, либо ошибка программиста. –