Linux

檢查路徑是否超過 Unix 域套接字的最大值

  • January 5, 2015

作業系統限制 Unix 域套接字的路徑長度。如何檢查特定路徑是否在該限制範圍內?

或者,換句話說,如何在 Linux 或 Mac OS X 系統上檢查 Unix 域套接字路徑的最大允許長度?

我的案例是 SSH 多路復用:如果 ControlPath 太長,那麼 SSH 多路復用將不起作用,因為它會創建一個 unix 域套接字。我希望能夠檢查有效的控制路徑,而不必實際啟動 ssh 會話並查找錯誤消息。

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

引用自:https://serverfault.com/questions/641347