| Предыдущий | Следующий |
| MACH_SEND_INVALID_TYPE | MACH_SEND_INVALID_TRAILER |
MACH_SEND_INVALID_HEADER
Заголовок не описывает допустимую отправку
MACH_SEND_INVALID_HEADER означает, что поля mach_msg_header_t не образуют допустимую комбинацию для отправки из пользовательского пространства в ядро. Наиболее важное поле — msgh_bits: оно кодирует диспозиции портов назначения, ответа и voucher, а также признак сложного сообщения. Зарезервированные или несовместимые биты, недопустимая для указанного поля порта диспозиция либо несогласованный заголовок могут сделать всё сообщение недопустимым.
Условие полезно тем, что возникает до доставки сообщения. Оно указывает на логику сериализации или построения интерфейса, а не на доступность сервера. Замена только константы, возвращаемой обёрткой, не является исправлением: проверьте весь заголовок и код его заполнения.
Что проверить
- Задавайте диспозиции портов документированными макросами
MACH_MSGH_BITS, а не числовыми литералами. - Обнуляйте зарезервированные биты и инициализируйте все поля заголовка до назначения портов.
- Убедитесь, что поле remote содержит допустимое право send или send-once, а поле local/reply совместимо с протоколом.
- Проверьте упаковку структуры и сгенерированные привязки, если сообщение пересекает границу языка или ABI.
Ссылки
- Исходный код Apple XNU: mach/message.h
- Справочник интерфейса ядра Mach: mach_msg
- Apple Kernel Programming Guide: обзор Mach
Нужно найти другой код? Найти другой код состояния или ошибки.