Почему максимальная длина пути разрешена для 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: Не знаю, почему, но такие вопросы меня действительно интересуют.