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