| Предыдущий | Следующий |
| MACH_SEND_IN_PROGRESS | MACH_SEND_INVALID_DEST |
MACH_SEND_INVALID_DATA
Встроенная часть сообщения не прошла проверку на стороне отправки
MACH_SEND_INVALID_DATA — результат отправки Mach для недопустимых встроенных данных. Он возникает при проверке исходящего сообщения ядром, до его получения назначением. Статус относится к данным, содержащимся непосредственно в буфере сообщения; он не сообщает о недоступности целевого порта и не относится к случаю внестрочной памяти, представленному MACH_SEND_INVALID_MEMORY.
В вызовах, сгенерированных в стиле MIG, видимая оболочка RPC может скрывать структуру сообщения, приведшую к отказу. Поэтому полезной границей диагностики является точный буфер и метаданные сообщения, переданные mach_msg, а не последующий код ожидания ответа. Считайте попытку передачи сообщения неудачной и не предполагайте, что часть встроенной полезной нагрузки достигла сервера.
Что исследовать
- Запишите маску операции,
msgh_size, идентификатор сообщения и признак того, было ли оно помечено как сложное. - Убедитесь, что полный заголовок, количество элементов тела, дескрипторы и встроенная полезная нагрузка инициализированы по одним и тем же определениям ABI и структур.
- Сравните исходящую структуру с контрактом принимающей службы; не выводите формат протокола только из символического имени ошибки.
- Отделяйте этот случай от недопустимого указателя на внестрочную память и неверной диспозиции дескриптора, для которых предусмотрены собственные результаты Mach.
Ссылки
- Исходный код Apple XNU: mach/message.h
- Справочник интерфейса ядра Mach: mach_msg
- Справочное руководство GNU Mach: межпроцессное взаимодействие
Нужно найти другой код? Найти другой код состояния или ошибки.