Назад | Перейти на главную страницу

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

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

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

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

как я могу проверить максимально допустимую длину пути к сокету домена 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

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

В 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.