Что означает код возврата ядра macOS 0x1000000E (MACH_SEND_TOO_LARGE)?

 
Предыдущий Следующий
MACH_SEND_NO_BUFFER MACH_SEND_INVALID_TYPE

MACH_SEND_TOO_LARGE

Это не просто ошибка локального буфера

MACH_SEND_TOO_LARGE означает, что сформированное сообщение Mach превышает размер, который согласен принять целевой порт или текущая реализация IPC. Результат отличается от MACH_SEND_MSG_TOO_SMALL: здесь у вызывающей стороны есть сообщение, но оно слишком велико для отправки как единое целое. XNU не задаёт универсального фиксированного максимума размера сообщения; на крупные отправки могут влиять архитектурные ограничения и временные условия, а исходный код определяет порог надёжности для закрытого использования приложением, а не переносимую общедоступную квоту.

Перенос больших данных из встроенной полезной нагрузки обычно надёжнее простого увеличения структуры сообщения. Когда модель владения это допускает, протокол может передавать порт, дескриптор общей памяти, файловый дескриптор через высокоуровневый мост или дескриптор внестрочной памяти. Получатель всё равно должен проверять размер и использование ресурсов.

Проверки проекта

  • Запишите общий msgh_size, размер встроенной полезной нагрузки, количество дескрипторов и целевую службу.
  • Определите явный максимальный размер протокола, а не полагайтесь на неявное ограничение ядра.
  • Если атомарность одного запроса не обязательна, разбивайте крупную работу на части с номерами последовательности и подтверждениями.
  • Убедитесь, что принимающая служба имеет согласованную политику для внестрочных данных и не выделяет неограниченные буферы по недоверенному входу.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.