| Предыдущий | Следующий |
| EBFONT | ENOTRECOVERABLE |
ETOOMANYREFS
На этой странице рассматривается состояние Слишком много ссылок для операции сокета Darwin в стиле splice. Сетевой путь не смог создать ещё одну ссылку, требуемую операцией.
Значение на этой платформе
Обработка системных вызовов Darwin BSD: слишком большое число ссылок для операции сокета Darwin в стиле splice относится к Darwin errno и должно декодироваться по точному заголовку SDK или XNU, использованному целевой системой. Расширения Darwin и устаревшие имена STREAMS, связанные с этим состоянием, могут отличаться наличием или нумерацией в других UNIX-подобных системах при диагностике избыточного числа ссылок сокета. В рамках Обработки системных вызовов Darwin BSD формулировка, связанная с ETOOMANYREFS, указывает на исходный интерфейс, но не доказывает, что код вернула современная подсистема с похожим названием.
Darwin назначает нескольким символам errno вне POSIX собственные значения и номера при диагностике избыточного числа ссылок сокета. При исследовании слишком большого числа ссылок для операции сокета в стиле splice не декодируйте число по таблице Linux и не считайте, что тот же символ возвращается тем же API в другой ОС.
Данные, определяющие владельца ошибки
| Сведения | На какой вопрос отвечают |
|---|---|
| Семейство и тип сокета, количество ссылок или прав в очереди, ограничения процесса, другая сторона и трассировка жизненного цикла. | Связывают ошибку с конкретным действующим объектом API, а не только с переведённым сообщением при диагностике избыточного числа ссылок сокета. |
| Значение Darwin errno и версия заголовка SDK/XNU, по которому оно декодировано при диагностике избыточного числа ссылок сокета. | Показывают, возникла ли ошибка в ABI вызывающей стороны, оболочке или поставщике при диагностике избыточного числа ссылок сокета. |
| Результат первого системного вызова или ioctl, а также процесс, поток и поколение объекта при диагностике избыточного числа ссылок сокета. | Сохраняют первую границу до того, как errno может быть перезаписан при диагностике избыточного числа ссылок сокета. |
| Заведомо исправный объект того же класса в той же сборке macOS при диагностике избыточного числа ссылок сокета. | Даёт контрольное сравнение на той же платформе. |
Сохраните errno сразу после отказавшего вызова, вернувшего состояние Слишком много ссылок для операции сокета Darwin в стиле splice, до выполнения форматирования, трассировки, выделения памяти или очистки. Для Слишком много ссылок для операции сокета Darwin в стиле splice также сохраните возвращаемое значение функции, поскольку многие интерфейсы C сообщают об ошибке через него, а errno используют лишь как дополнительную информацию.
Последовательность проверки
- Закройте один контролируемый дубликат или ссылку и повторите операцию один раз. После контроля повторите исходную операцию, чтобы результат оставался относящимся к слишком большому числу ссылок.
- Немедленно сохраните errno и сравните связанное возвращаемое значение при диагностике избыточного числа ссылок сокета. При проверке числа ссылок сокета не меняйте двоичный файл, ABI заголовков и поставщика.
- Повторите тест с одним контролируемым объектом, сохранив идентификатор и песочницу без изменений при диагностике избыточного числа ссылок сокета. Зафиксируйте, достигает ли проверка числа ссылок сокета той же границы системного вызова или среды выполнения, что и исходная ошибка.
Предостережение о переносимости
| Соблазнительное предположение | Более безопасная интерпретация |
|---|---|
| Английская фраза считается переносимой между платформами | Ошибка относится к обработке системных вызовов Darwin BSD; до применения таблицы errno другой платформы проверьте заголовки целевой системы и API, вернувший код |
| Повтор завершился успешно и стёр исходные данные | Повтор может заменить ошибку другим состоянием; заранее сохраните первый вызов, числовое значение и поколение объекта |
Если оболочка преобразует состояние Слишком много ссылок для операции сокета Darwin в стиле splice в исключение или логическое значение, добавьте инструментирование ниже этой оболочки. Для Слишком много ссылок для операции сокета Darwin в стиле splice решающее значение имеет системный вызов, ioctl, функция CRT или точка входа совместимости, впервые предоставившая код.
Узкое исправление
Целевое исправление. Освободите утёкшие ссылки сокетов и ограничьте параллелизм; не считайте ошибку общим пределом открытых файлов без подтверждающих данных.
Доказательство отсутствия регрессии. Количество ссылок уменьшается после закрытия, а операция остаётся стабильной при ожидаемом параллелизме. Проверьте один поддерживаемый граничный случай и один намеренно отрицательный случай, чтобы обработка состояния Слишком много ссылок для операции сокета Darwin в стиле splice оставалась явной.
Технические ссылки
Эти источники владельцев и стандартов определяют пространство имён и контракт подсистемы, необходимые для проверки Обработки системных вызовов Darwin BSD ETOOMANYREFS в установленной версии платформы.
- Apple XNU: errno.h — определяет используемое пространство статусов при диагностике избыточного числа ссылок сокета.
- Apple: ошибки системных вызовов intro(2) — описывает границу API или жизненного цикла при диагностике избыточного числа ссылок сокета.
- Apple OSS: исходный код XNU — предоставляет контекст ABI, реализации или протокола при диагностике избыточного числа ссылок сокета.
- The Open Group: errno.h — определяет ограничения переносимости и проверки при диагностике избыточного числа ссылок сокета.
Нужно найти другой код? Найти другой код состояния или ошибки.
