Linux
檢查路徑是否超過 Unix 域套接字的最大值
作業系統限制 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
.