Utwórz unikalne nazwane gniazdo z wiersza poleceń

29

Czy istnieje polecenie podobne do mkfifo, ale dotyczy gniazd domeny?

benmmurphy
źródło

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.

kubańczyk
źródło
15

Najnowsze netcat (nc) i podobne programy (o ile mi wiadomo) mają opcje gniazd domeny.
W przeciwnym razie możesz rzucić okiem na ucspi-unix

Gregory MOUSSAT
źródło
1
+1 za ncBSD.
Clint Pachl
1
W sprawie Debiana:# sudo apt-get install netcat-openbsd
Dr Koutheir Attouchi 24.04.17
2
ok po instalacji, jak utworzyć „plik gniazda”
Alexander Mills
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ź .

akostadinov
źródło
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.

Karimai
źródło
-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é