操作系统限制Unix域套接字path的长度。 我怎样才能检查一个特定的path是否在这个限制之内?
换句话说,如何在Linux或Mac OS X系统上检查Unix域套接字path的最大允许长度?
我的用例是用于SSH多路复用:如果ControlPath太长,那么SSH多路复用将不起作用,因为它会创build一个unix域套接字。 我希望能够检查一个有效的控制path,而不必实际启动一个SSH会话,并寻找错误消息。
如何在Linux上检查Unix域套接字path的最大允许长度
在Linux上,这个长度通常定义为108。
它由/usr/include/linux/un.h头文件中的UNIX_PATH_MAXvariables定义:
cat /usr/include/linux/un.h | grep "define UNIX_PATH_MAX" #define UNIX_PATH_MAX 108
你可以在这里find更多的信息:
在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域套接字path的最大长度。
#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 。