| Предыдущий | Следующий |
| ENOSTR | ENOSTR |
ETIMEDOUT
Отсутствие своевременного завершения не является активным отказом
ETIMEDOUT означает, что операция не завершилась до наступления соответствующего тайм-аута. Код отличается от ECONNREFUSED, когда назначение активно отклоняет установление соединения, и от ENETUNREACH, когда локальный стек изначально не имеет маршрута.
Тайм-аут не доказывает, что удалённый узел выключен. Пакеты могут фильтроваться, теряться, задерживаться, идти по отказавшему пути или приниматься другой стороной, которая не завершает ожидаемый приложением обмен. Наблюдаемый системный вызов и политика тайм-аута являются обязательным контекстом.
Что сохранить
- Запишите тип операции, состояние сокета, локальный и удалённый адреса, время начала, источник срока ожидания и счётчики транспортных повторных передач или повторов приложения.
- Отличайте транспортный тайм-аут ядра от срока ожидания приложения. Они могут сработать в разное время и назначают ответственность за отмену разным уровням.
- Сохраните сведения о том, были ли до тайм-аута получены байты или подтверждения протокола; от этого зависит безопасность повторного выполнения операции.
Полезное сравнение
ECONNRESET — явный результат сброса. ETIMEDOUT — отсутствие успешного результата в отведённое время. Эти ошибки требуют разных данных и не должны объединяться в одну категорию «сеть отказала».
Ссылки
- XNU: определения errno Darwin
- POSIX: connect()
- RFC 9293: повторные передачи и аварийное прерывание TCP
Нужно найти другой код? Найти другой код состояния или ошибки.