Что означает код errno 55 (ENOBUFS)?

 
Также может означать:
КонстантаТипОС
ERROR_DEV_NOT_EXISTОшибка WindowsWindows
ENOANOerrnoLinux
EBADSLTerrnoSolaris
FLOPPY_INTERNAL_ERRORКод BSODWindows
Предыдущий Следующий
ENOANO EBADSLT

ENOBUFS

Сетевые ресурсы ядра, а не обязательно память кучи процесса

ENOBUFS сообщает о нехватке ресурсов буферизации для операции с сокетом. Это отличается от сбоя выделения памяти процессом: давление может возникнуть в очередях сокетов, блоках управления протоколом, очередях интерфейсов или других ресурсах сетевого стека, даже когда приложение по-прежнему нормально выделяет память.

Ошибка также отличается от EMSGSIZE. Сообщение допустимого размера может завершиться с ENOBUFS, если стек сейчас не способен поставить его в очередь; слишком большое атомарное сообщение может получить EMSGSIZE даже при наличии достаточного количества буферов.

Что измерить до настройки

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

Почему слепого повтора недостаточно

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

Ссылки


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