| Предыдущий | Следующий |
| MACH_RCV_BODY_ERROR | MACH_RCV_SCATTER_SMALL |
MACH_RCV_INVALID_TYPE
Ошибка находится в спецификации рассеянного приёма вызывающей стороны
MACH_RCV_INVALID_TYPE означает, что в списке рассеивания указана недопустимая спецификация типа сообщения. Это не вывод о том, что отправитель использовал недопустимый дескриптор в исходном сообщении. Отказ возникает в необязательном механизме перезаписи или рассеивания на стороне приёма, который описывает размещение внестрочных данных.
Это различие важно при отладке RPC-кода со сгенерированными привязками. Обычный буфер приёма может быть полностью допустимым, тогда как дополнительное описание рассеивания — нет. Соседний статус MACH_RCV_SCATTER_SMALL, напротив, обозначает допустимую область перезаписи недостаточной ёмкости; этот код указывает на сам тип или спецификацию дескриптора.
Что исследовать
- Убедитесь, что путь приёма действительно использует нужный API перезаписи или рассеивания, а вспомогательные структуры соответствуют той же версии заголовков.
- Проверяйте объявленный тип каждого дескриптора рассеивания до сравнения числа байтов или выделения большего хранилища.
- В журналах и обработке ошибок отделяйте внестрочные данные от обычного встроенного буфера сообщения.
- Когда формированием дескрипторов владеет платформа, предпочитайте документированный вспомогательный API приёма: списки рассеивания, написанные вручную, чувствительны к ABI.
Ссылки
- Исходный код Apple XNU: mach/message.h
- Справочник интерфейса ядра Mach: mach_msg
- Справочное руководство GNU Mach: межпроцессное взаимодействие
Нужно найти другой код? Найти другой код состояния или ошибки.
