理由については、nwildnerはすでに優れた答えを書いています。
ここでは、どのように、どのように相対パスを使用するかに焦点を当てます。
内部的には、ソケットファイルは名前で検索することもできますが(私は推測します)、通常はiノードで検索されます。Linuxでは、この検索はnet / unix / af_unix.cでunix_find_socket_byinode()
定義されている関数によって保証されます。
これは次のように簡単に確認できます。
- 2つのディレクトリA /とB /を作成します。
- 各ディレクトリの下で、同じ名前のソケットファイルでプロセスをリッスンさせます。
socat
あなたのようなコマンドを使用します。
$ socat UNIX-LISTEN:./my.sock -
- ここで、A / my.sockをB /に、またはその逆に移動してソケットファイルを交換します。
- これ以降、クライアントアプリケーションがA / my.sockに接続するとサーバーBに接続し、B / my.sockに接続するとサーバーAに接続します(ただし、通信が終了すると、サーバープロセスは独自のソケットファイルと思われるものを正当に削除します)。
少数のUnixシステム(Linux Debian、FreeBSD、およびOpenIndianaで多様性を得るため)でこの動作を確認したため、この動作は標準ではないにしても、少なくとも広く普及しているようです。
通常、クライアントプロセスはサーバーとの初期通信を確立する方法を知らない可能性があるため、絶対パスはクライアントプロセスとサーバープロセス間の規則として使用されます。
ただし、この最初の通信が問題にならない場合は、ソケットファイルの作成に相対パスを使用して、ソケットファイルの場所がサーバープロセスによって直接制御されていない場合のパスの長さの問題を回避できます。