Проверьте, превышает ли путь максимум для сокета домена Unix

9

Операционные системы ограничивают длину пути доменного сокета Unix. Как я могу проверить, находится ли конкретный путь в пределах этого предела?

Или, другими словами, как я могу проверить максимально допустимую длину пути сокета домена Unix в системе Linux или Mac OS X?

Мой пример использования здесь для мультиплексирования SSH: если ControlPath слишком длинный, то мультиплексирование SSH не будет работать, так как он создает сокеты домена unix. Я хочу иметь возможность проверить допустимый путь управления без необходимости фактически запускать сессию ssh и искать сообщение об ошибке.

Лорин Хохштайн
источник

Ответы:

8

Как я могу проверить максимально допустимую длину пути сокета домена Unix, на Linux

В Linux эта длина обычно определяется как 108.

Он определяется UNIX_PATH_MAXпеременной в /usr/include/linux/un.hзаголовочном файле:

cat /usr/include/linux/un.h | grep "define UNIX_PATH_MAX"

#define UNIX_PATH_MAX   108

Вы можете найти дополнительную информацию здесь:

krisFR
источник
Есть ли причина, по которой адреса путей сокетов Unix более ограничены, чем PATH_MAX?
CMCDragonkai
6

В Mac OS X, в соответствии со unixстраницей руководства :

UNIX-domain addresses are variable-length filesystem pathnames of at most
104 characters.  The include file <sys/un.h> defines this address:

       struct sockaddr_un {
               u_char  sun_len;
               u_char  sun_family;
               char    sun_path[104];
       };

Вот программа, которая компилируется как в Linux, так и в OS X, которая выведет максимальную длину пути сокета домена unix.

#include <sys/un.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
    struct sockaddr_un s;
    printf("%lu\n", sizeof(s.sun_path));
    return 0;
}

На Linux это выводит 108, и на OS X, это выводит 104.

Лорин Хохштайн
источник