Créer un socket nommé Unix à partir de la ligne de commande


29

Existe-t-il une commande similaire à mkfifo mais pour les sockets de domaine?

Réponses:


21

Il n'y a pas d'équivalent exact de mkfifo pour socket, c'est-à-dire qu'il n'y a pas de commande qui crée simplement une socket "suspendue". C'est pour une raison historique: la fonction du serveur bind (), celle qui crée un nom / inode de socket dans le système de fichiers, échoue si le nom est déjà utilisé. En d'autres termes, le serveur ne peut pas fonctionner sur un socket préexistant.

Donc, si vous aviez créé un socket plus tôt, il devrait tout de même être supprimé par le serveur. Aucun avantage. Comme vous le voyez avec la réponse de Gregory, vous pouvez créer un socket SI vous y gardez un serveur, tel que netcat. Une fois qu'un serveur est parti, l'ancien socket est parti. Un nouveau serveur a un nouveau socket, et tous les clients doivent se reconnecter, bien que le nom du socket soit identique.


15

Les programmes Netcat (nc) et similaires les plus récents (socat pour autant que je sache) ont des options de socket de domaine.
Sinon, vous pouvez jeter un œil à ucspi-unix


1
+1 pour ncBSD.
Clint Pachl

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

2
ok une fois que vous avez installé cela, comment créer un "fichier socket"
Alexander Mills

8

Vous pouvez utiliser python:

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

Voir aussi C, cette réponse .


mksock() { SOCK="$1" python -c "import os, socket as s; s.socket(s.AF_UNIX).bind(os.environ['SOCK'])"; }pour une utilisation facile de la coque: mksock /tmp/test.sock
Tino

0

J'utilise simplement netcatet reste à l'écoute dans un tel cas:

nc -lkU aSocket.sock

vous devez utiliser netcat-openbsd . netcat-traditional n'a pas de -Ucommutateur pour le socket de domaine Unix.


-k Force nc à rester à l'écoute d'une autre connexion une fois sa connexion actuelle établie. C'est une erreur d'utiliser cette option sans l'option -l. -U Spécifie d'utiliser des sockets de domaine UNIX.
Johan Boulé
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.