Mengenai alasannya, nwildner sudah menulis jawaban yang bagus .
Di sini saya hanya akan fokus pada bagaimana dan penggunaan jalur relatif.
Secara internal, sementara file socket juga dapat dicari berdasarkan nama (saya kira), mereka biasanya dicari oleh inode. Di Linux, pencarian ini dijamin oleh fungsi yang unix_find_socket_byinode()
didefinisikan dalam net / unix / af_unix.c .
Ini dapat dengan mudah diperiksa sebagai berikut:
- Buat dua direktori A / dan B / .
- Di bawah setiap direktori, buat proses mendengarkan pada file socket bertuliskan nama yang sama. Dengan
socat
Anda akan menggunakan perintah seperti:
$ socat UNIX-LISTEN:./my.sock -
- Sekarang tukar file socket dengan memindahkan A / my.sock ke B / dan sebaliknya.
- Mulai sekarang, jika aplikasi klien terhubung ke A / my.sock, ia akan menghubungi server B , dan jika itu terhubung ke B / my.sock, itu akan menghubungi server A (perhatikan bahwa ketika komunikasi berakhir, proses server mungkin hapus dengan sah apa yang dianggapnya sebagai file soketnya sendiri).
Saya memeriksa perilaku ini pada beberapa sistem Unix (Linux Debian, FreeBSD dan OpenIndiana untuk mendapatkan keragaman), jadi perilaku ini setidaknya menyebar luas, jika tidak standar.
Path absolut biasanya digunakan sebagai konvensi antara klien dan proses server, karena proses klien mungkin tidak tahu bagaimana membangun komunikasi awal dengan server.
Namun, jika komunikasi awal ini tidak menjadi masalah, maka dari itu tampaknya aman untuk menggunakan jalur relatif untuk pembuatan file socket, memungkinkan untuk menghindari masalah panjang jalur ketika lokasi file soket tidak secara langsung dikendalikan oleh proses server.