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


9

操作系统限制Unix域套接字的路径长度。如何检查特定路径是否在该限制内?

或者,换句话说,如何在Linux或Mac OS X系统上检查Unix域套接字的路径的最大允许长度?

我的用例是SSH多路复用:如果ControlPath太长,则SSH多路复用将不起作用,因为它会创建Unix域套接字。我希望能够检查有效的控制路径,而不必实际启动ssh会话并查找错误消息。

Answers:


8

如何在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

您可以在此处找到更多信息:


Unix套接字路径地址比PATH_MAX受限制的原因有何原因?
CMCDragonkai '16

6

在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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.