| Предыдущий | Следующий |
| MACH_RCV_INVALID_NAME | MACH_RCV_TOO_LARGE |
MACH_RCV_TIMED_OUT
Ожидаемый результат состояния простоя
MACH_RCV_TIMED_OUT означает, что операция приёма использовала MACH_RCV_TIMEOUT, но до истечения интервала не поступило подходящее сообщение. Сообщение не было извлечено из очереди. В цикле событий это часто нормальная возможность выполнить периодическую работу, проверить отмену или обновить состояние жизнеспособности; само по себе это не означает неисправность порта, сервера или клиента.
Интерпретация тайм-аута зависит от параметров. Исторический интерфейс Mach предупреждает, что если прерывание приёма не запрошено, прерванный вызов может быть повторён с исходным тайм-аутом, поэтому частые прерывания способны сделать наблюдаемое ожидание дольше простого расчёта по настенным часам. Если важен точный общий срок операции, используйте в логике высокого уровня монотонный deadline.
Как правильно использовать
- Различайте в журналах и метриках тайм-аут простоя, deadline протокола и сбой однорангового узла.
- Записывайте имя порта или набора портов, значение тайм-аута и состояние очереди, если оно доступно.
- Используйте цикл с deadline, если общий бюджет операции должен включать прерывания и повторы.
- Не опрашивайте с очень малыми тайм-аутами, когда достаточно событийного блокирующего приёма.
Ссылки
- Справочник интерфейса ядра Mach: mach_msg
- Руководство Apple по программированию ядра: обзор Mach
- Справочник GNU Mach: межпроцессное взаимодействие
Нужно найти другой код? Найти другой код состояния или ошибки.
