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