Utwórz unikalne nazwane gniazdo z wiersza poleceń


Odpowiedzi:


21

Nie ma dokładnego odpowiednika mkfifo dla gniazda, tzn. Nie ma polecenia, które po prostu tworzy „wiszące” gniazdo. Wynika to z przyczyn historycznych: funkcja serwera bind (), która tworzy nazwę gniazda / i-węzeł w systemie plików, kończy się niepowodzeniem, jeśli nazwa jest już używana. Innymi słowy, serwer nie może działać na istniejącym gnieździe.

Więc jeśli wcześniej utworzyłeś gniazdo, musiałoby to zostać najpierw usunięte przez serwer. Żadnych korzyści. Jak widać z odpowiedzią Gregory'ego, możesz utworzyć gniazdo JEŻELI trzymasz do tego serwer, na przykład netcat. Gdy serwer zniknie, stare gniazdo zniknie. Nowy serwer ma nowe gniazdo i wszyscy klienci muszą połączyć się ponownie, mimo że nazwa gniazda jest identyczna.



8

Możesz użyć Pythona:

python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/tmp/test.sock')"

Również C, patrz ta odpowiedź .


mksock() { SOCK="$1" python -c "import os, socket as s; s.socket(s.AF_UNIX).bind(os.environ['SOCK'])"; }dla łatwego użycia powłoki: mksock /tmp/test.sock
Tino

0

netcatW takim przypadku po prostu używam i słucham:

nc -lkU aSocket.sock

powinieneś użyć netcat-openbsd . netcat-traditional nie ma -Uprzełącznika, który jest przeznaczony dla gniazda domeny Unix.


-k Zmusza nc do kontynuowania nasłuchiwania innego połączenia po zakończeniu bieżącego połączenia. Używanie tej opcji bez opcji -l jest błędem. -U Określa użycie gniazd domeny UNIX.
Johan Boulé
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.