Почему максимальная длина пути разрешена для unix-сокетов на linux 108?

При создании сокета unix имя пути (man 7 unix) может быть максимально длиной 108 символов. Для друга это вызвало ошибку в его программе, потому что его путь был длиннее. Теперь мы задаемся вопросом, как именно это число было определено.

У меня есть подозрение, что число было определено так, чтобы sizeof этой структуры sockaddr_un было однозначным по сравнению с размером других таких sockaddresses, как sockaddr_in. Но если они хотели избежать столкновений с другими значениями sizeof, почему бы не использовать простое число, например? Может кто-то, пожалуйста, предоставить для этого источник?

Ответ 1

Это должно соответствовать пространству, доступному в удобной структуре данных ядра.

EDIT:

Цитата: "Разработка и внедрение операционной системы 4.4BSD" McKusick et. и др. (стр. 369):

Средства управления памятью вращаются вокруг структуры данных называемый mbuf. Mbufs или буферы памяти имеют длину 128 байтов, 100 или 108 байтов этого пространства, зарезервированного для хранения данных.

Ответ 2

Если вы не можете его найти, это просто означает, что найти нечего. Но это также может означать, что вы не смогли его найти. Тем не менее, я хотел бы поделиться тем, что я нашел до сих пор, и

Я догадываюсь, что число является условным.

Мое предположение подтверждается этими двумя утверждениями из библиотеки GNU C:

char sun_path[108]

Это имя используемого файла. Неполнота: Почему 108 магическое число? RMS предлагает сделать это массив нулевой длины и настроить пример следующие, чтобы использовать alloca для распределения соответствующего объема памяти на основе длины имени файла.

(Где RMS должен быть Ричард М. Столлман (другое предположение))

Тип даты: struct sockaddr
...

char sa_data[14]

Это фактическое данные адреса сокета, которые зависят от формата. Его длина также зависит от формата и может быть больше 14. Длина 14 sa_data по существу произвольный.

PS: Не знаю, почему, но такие вопросы меня действительно интересуют.