| Предыдущий | Следующий |
| ELOOP | EL3RST |
EMSGSIZE
Сообщение нельзя представить как одну обязательную единицу
EMSGSIZE важен для сокетов и протоколов, требующих атомарного сообщения. Операция отправки не может разделить переданную полезную нагрузку на допустимые единицы по правилам сокета, поэтому ядро отклоняет её, а не отправляет без уведомления только начальную часть.
Этим ошибка отличается от записи в поток, которая просто может завершиться частично. Она также отличается от ENOBUFS: EMSGSIZE относится к ограничению размера или кадрирования конкретного сообщения, а ENOBUFS — к доступным ресурсам буферизации.
Полезные измерения
- Запишите длину полезной нагрузки, тип сокета, протокол, семейство назначения и сведения о том, использовал ли вызов
sendmsg()несколько векторов ввода-вывода. - Для протокола датаграмм сравните размер отправляемой полезной нагрузки с ограничениями пути и протокола, а не считайте прикладной размер блока переносимым между системами.
- Проверьте, не добавило ли приложение заголовки, накладные данные шифрования или инкапсуляцию после расчёта максимального размера полезной нагрузки.
Чего не следует заключать
Ошибка не означает, что другая сторона получила неправильно сформированное прикладное сообщение. Локальное ядро отклонило попытку отправки до формирования допустимой передачи. Повтор неизменённых данных лишь снова нарушит то же ограничение размера.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.
