Erstellen Sie einen benannten Unix-Socket über die Befehlszeile


Antworten:


21

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.


15

Die neuesten Netcat- (nc) und ähnlichen Programme (so weit ich weiß socat) haben Domain-Socket-Optionen.
Ansonsten können Sie sich ucspi-unix ansehen


1
+1 für ncBSD.
Clint Pachl

1
Über Debian:# sudo apt-get install netcat-openbsd
Dr. Koutheir Attouchi

2
ok wenn du das installiert hast, wie erstelle ich eine "Socket-Datei"
Alexander Mills

8

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
Tino

0

Ich benutze netcatund höre in einem solchen Fall einfach weiter :

nc -lkU aSocket.sock

du solltest netcat-openbsd verwenden . netcat-traditional hat keinen -USwitch für Unix Domain Sockets.


-k Erzwingt, dass nc nach Abschluss der aktuellen Verbindung weiterhin auf eine andere Verbindung wartet. Es ist ein Fehler, diese Option ohne die Option -l zu verwenden. -U Gibt an, dass Sockets für UNIX-Domänen verwendet werden sollen.
Johan Boulé
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.