检查路径是否超出 Unix 域套接字的最大值

检查路径是否超出 Unix 域套接字的最大值

操作系统限制 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

相关内容