web-dev-qa-db-ja.com

パスがUnixドメインソケットの最大値を超えているかどうかを確認します

オペレーティングシステムは、Unixドメインソケットのパスの長さを制限します。特定のパスがその制限内にあるかどうかを確認するにはどうすればよいですか?

または、言い換えると、LinuxまたはMac OS Xシステムで、Unixドメインソケットのパスの最大許容長を確認するにはどうすればよいですか?

ここでの私の使用例はSSH多重化です。ControlPathが長すぎると、UNIXドメインソケットが作成されるため、SSH多重化は機能しません。実際にsshセッションを開始してエラーメッセージを探すことなく、有効な制御パスを確認できるようにしたいのですが。

9
Lorin Hochstein

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

ここで詳細情報を見つけることができます:

8
krisFR

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を出力します。

6
Lorin Hochstein