Подтвердить что ты не робот

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

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

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

Фон в том, что POSIX не ясно о максимальной длине пути для доступа к таким "файлам":

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

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

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

4b9b3361

Ответ 1

FHS говорит: /run

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

Ответ 2

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

Ответ 3

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