オペレーティングシステムは、Unixドメインソケットのパスの長さを制限します。特定のパスがその制限内にあるかどうかを確認するにはどうすればよいですか?
または、言い換えると、LinuxまたはMac OS Xシステムで、Unixドメインソケットのパスの最大許容長を確認するにはどうすればよいですか?
ここでの私の使用例はSSH多重化です。ControlPathが長すぎると、UNIXドメインソケットが作成されるため、SSH多重化は機能しません。実際に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
のmanページによると:
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
を出力します。