Где разместить конечные точки (файлы) сокетов домена Unix (AF_UNIX)?

Существует ли соглашение о том, где размещать «файлы», представляющие конечные точки для сокетов домена Unix?

Я обычно помещаю их в /tmp/some-application-specific-subdir-name/, но мне интересно, есть ли более общее место.

Предыстория заключается в том, что POSIX не совсем ясно, что такое < em>максимальная длина пути к доступу к таким «файлам»:

Размер sun_path намеренно оставлен неопределенным. Это связано с тем, что в разных реализациях используются разные размеры. Например, в 4.3 BSD используется размер 108, а в 4.4 BSD — 104. Поскольку большинство реализаций основаны на версиях BSD, размер обычно находится в диапазоне от 92 до 108.

Приложения не должны предполагать определенную длину для sun_path или предполагать, что он может содержать {_POSIX_PATH_MAX} байт (256).

Таким образом, это «ограничение» на длину пути должно быть исключено из конфигураций имени файла/пути приложения.


person alk    schedule 28.09.2011    source источник


Ответы (3)


В FHS говорится: /run

(Раньше это было /var/run.)

person JB.    schedule 28.09.2011
comment
Спасибо за ссылку на FHS, я пропустил. В любом случае запись в /var/run обычно невозможна для обычных пользователей, так как это не для рассматриваемого приложения. Итак, есть ли альтернатива /var/run? - person alk; 28.09.2011
comment
@alk, я обычно просто помещаю их вместе с динамическими данными приложения. Который может оказаться в /tmp. - person JB.; 29.09.2011
comment
Примечание от 2019 года: многие дистрибутивы сейчас переносят /var/run на /run. - person 张实唯; 01.06.2019
comment
Пожалуйста, @JB. обновить ответ: с 2015 г. FHS 3.0: эти функции были перемещены в /run; этот каталог существует для обеспечения совместимости с системами и программным обеспечением, использующим более раннюю версию этой спецификации. Дополнительная информация - person caligari; 06.08.2019
comment
Обновлено до FHS 3.0. @caligari: ты знаешь, что тебе разрешено редактировать по своему усмотрению, верно? - person JB.; 20.09.2019

В Ubuntu команда netstat показывает сокеты домена UNIX в нескольких разных местах. Некоторые, однако несколько, в /var/run, как предложил JB; большинство из них в @/tmp/… (я полагаю, что @ обозначают абстрактные имена, которые специфичны для Linux), а некоторые другие - в различных местах приложения. Таким образом, на практике наиболее распространенным местом является /tmp, по крайней мере, на Ubuntu, которая является довольно распространенной платформой. Обратите внимание, что расположение /tmp имеет здесь особое значение, так как UDS должен создаваться каждым bind и впоследствии удаляться (либо при закрытии сокета, либо при выходе из приложения, либо при запуске приложения в следующий раз и перед его следующим вызовом). до bind).

person Hibou57    schedule 30.03.2013
comment
Спасибо за ваши предложения. При проектировании было принято решение сделать базовый путь для файлов UDS настраиваемым и установить по умолчанию /tmp/, чтобы файлы шли по /tmp/<app-specific-dir>/. Используемые платформы: Red-Hat-Linux, Suse-Linux и z/Linux. - person alk; 31.03.2013

В Android вы можете поместить его в /dev/socket/

person MajstorKvaris    schedule 16.03.2016
comment
Пожалуйста, добавьте некоторые пояснения. Ваш ответ в настоящее время помечен как низкокачественный и может быть удален. - person Adam B; 16.03.2016
comment
Хотя это может дать ответ на вопрос, предоставление дополнительного контекста относительно того, почему и/или как отвечает на вопрос, значительно улучшит его долгосрочную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить некоторые пояснения. - person Toby Speight; 16.03.2016