| Предыдущий | Следующий |
| MACH_SEND_MSG_TOO_SMALL | MACH_SEND_INVALID_RIGHT |
MACH_SEND_INVALID_REPLY
Почему порт ответа имеет значение
MACH_SEND_INVALID_REPLY относится к msgh_local_port — полю, обычно используемому как порт ответа. Запрос может иметь допустимый адрес назначения и всё равно завершиться ошибкой, если право обратного вызова или ответа отсутствует при обязательности по протоколу, уже освобождено, принадлежит пространству имён другой задачи либо сочетается с недопустимой диспозицией в msgh_bits.
Mach обрабатывает права портов заголовка атомарно. Если одно право используется в несовместимых ролях назначения и ответа, ядро может сообщить недопустимость назначения или ответа в зависимости от возможной атомарной интерпретации. Это проблема проектирования владения, а не случайная гонка, которую следует заглушить безусловным повтором.
Безопасная диагностика
- Записывайте оба поля портов заголовка и их удалённые и локальные диспозиции как единое целое.
- Создавайте порт ответа и управляйте им в соответствии с контрактом API или MIG; не используйте порт повторно после передачи или освобождения требуемого права.
- Проверьте протокол сервера: односторонние сообщения не должны заполнять порт ответа только по соглашению.
- После восстановления формируйте весь заголовок заново, а не меняйте только числовое имя порта.
Ссылки
- Справочник интерфейса ядра Mach: mach_msg
- Исходный код Apple XNU: mach/message.h
- Руководство Apple по программированию ядра: обзор Mach
Нужно найти другой код? Найти другой код состояния или ошибки.