Nedeniyle ilgili olarak, nwildner zaten mükemmel bir cevap yazdı .
Burada sadece nasıl ve göreceli yol kullanımına odaklanacağım.
Dahili olarak, soket dosyası adıyla da (sanırım) aranabilirken, genellikle inode tarafından aranır. Linux'ta, bu arama net / unix / af_unix.c dosyasındaunix_find_socket_byinode()
tanımlanan işlevle sağlanır .
Bu aşağıdaki gibi kolayca kontrol edilebilir:
- İki dizin A / ve B / oluşturun .
- Her dizinin altında, aynı adı taşıyan soket dosyalarını bir işlemin dinlemesini sağlayın. Sizinle aşağıdaki
socat
gibi bir komut kullanırsınız:
$ socat UNIX-LISTEN:./my.sock -
- Şimdi soket dosyalarını A / my.sock öğesini B / ve tersi yönde taşıyarak değiştirin .
- Şu andan itibaren, istemci uygulaması bağlandığı takdirde A / my.sock sunucu irtibata geçecektir B ve bağlanıyorsa B / my.sock sunucu irtibata geçecektir A iletişim uçları (not olsa o zaman, sunucu işlemi may kendi soket dosyası olduğunu düşündüğünü meşru bir şekilde silin).
Bu davranışı bir avuç Unix sisteminde (Linux Debian, FreeBSD ve OpenIndiana bazı çeşitlilik elde etmek için) kontrol ettim, bu yüzden bu davranış standart değilse, en azından geniş yayılmış gibi görünüyor.
Mutlak yollar genellikle istemci ve sunucu işlemleri arasında bir kural olarak kullanılır, çünkü istemci işlemi, sunucuyla ilk iletişimin nasıl kurulacağını bilmeyebilir.
Ancak, bu ilk iletişim bir sorun değilse, soket dosyaları oluşturmak için göreli yollar kullanmak güvenli görünüyor ve soket dosyası konumu sunucu işlemi tarafından doğrudan kontrol edilmediğinde yol uzunluğu sorunlarının önlenmesine izin veriyor.