| Предыдущий | Следующий |
| MACH_SEND_INVALID_DATA | MACH_SEND_TIMED_OUT |
MACH_SEND_INVALID_DEST
Почему это происходит
MACH_SEND_INVALID_DEST означает, что msgh_remote_port нельзя использовать как адрес назначения отправки. Имя порта Mach имеет смысл только в пространстве прав вызывающей задачи; число из другой задачи, освобождённое право, dead name или право с неверной диспозицией непригодны. Работающая служба также может исчезнуть после кэширования клиентом права send.
Это не отказ прикладного сервера: ядро не доставило запрос службе. Рассматривайте ошибку как отказ конечной точки IPC или владения и создавайте запрос заново только после повторного обнаружения или установления права назначения.
Что проверить
- Запишите имя порта назначения, remote disposition в
msgh_bitsи компонент, предоставивший право. - Убедитесь, что вызывающая задача всё ещё владеет send/send-once, а не receive, dead name или устаревшим числом.
- Для launchd, XPC или MIG повторите документированный поиск службы вместо хранения порта через её перезапуск.
- Не считайте запрос обработанным; выбор повтора зависит от идемпотентности RPC.
Ссылки
- Apple Kernel Programming Guide: обзор Mach
- Справочник интерфейса ядра Mach: mach_msg
- Исходный код Apple XNU: mach/message.h
Нужно найти другой код? Найти другой код состояния или ошибки.