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