Операционные системы ограничивают длину пути к сокету домена 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
.