Gibt es einen Befehl ähnlich wie mkfifo, aber für Domain-Sockets?
Gibt es einen Befehl ähnlich wie mkfifo, aber für Domain-Sockets?
Antworten:
Es gibt kein genaues Äquivalent zu mkfifo für Socket, dh es gibt keinen Befehl, der nur einen "hängenden" Socket erzeugt. Dies hat historische Gründe: Die Serverfunktion bind (), die einen Socket-Namen / Inode im Dateisystem erstellt, schlägt fehl, wenn der Name bereits verwendet wird. Mit anderen Worten, der Server kann nicht mit einem bereits vorhandenen Socket arbeiten.
Wenn Sie also früher einen Socket erstellt hätten, müsste dieser ohnehin zuerst vom Server entfernt werden. Kein Vorteil. Wie Sie anhand der Antwort von Gregory sehen, können Sie einen Socket erstellen, wenn Sie einen Server dafür haben, z. B. netcat. Sobald ein Server weg ist, ist der alte Socket weg. Ein neuer Server hat einen neuen Socket, und alle Clients müssen erneut eine Verbindung herstellen, obwohl der Name des Sockets identisch ist.
Die neuesten Netcat- (nc) und ähnlichen Programme (so weit ich weiß socat) haben Domain-Socket-Optionen.
Ansonsten können Sie sich ucspi-unix ansehen
# sudo apt-get install netcat-openbsd
Sie können Python verwenden:
python -c "import socket as s; sock = s.socket(s.AF_UNIX); sock.bind('/tmp/test.sock')"
Siehe auch C diese Antwort .
mksock() { SOCK="$1" python -c "import os, socket as s; s.socket(s.AF_UNIX).bind(os.environ['SOCK'])"; }
für einfache Shell-Nutzung: mksock /tmp/test.sock
Ich benutze netcat
und höre in einem solchen Fall einfach weiter :
nc -lkU aSocket.sock
du solltest netcat-openbsd verwenden . netcat-traditional hat keinen -U
Switch für Unix Domain Sockets.
nc
BSD.