操作系统限制 Unix 域套接字的路径长度。如何检查特定路径是否在该限制之内?
或者换句话说,如何在 Linux 或 Mac OS X 系统上检查 Unix 域套接字路径的最大允许长度?
我在这里的用例是 SSH 多路复用:如果 ControlPath 太长,则 SSH 多路复用将无法工作,因为它会创建 unix 域套接字。我希望能够检查有效的控制路径,而不必实际启动 ssh 会话并查找错误消息。
答案1
如何在 Linux 上检查 Unix 域套接字路径的最大允许长度
在 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
您可以在这里找到更多信息:
答案2
在 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
。