59 votes

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

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

33voto

kubanczyk Points 13302

Il n'y a pas d'équivalent exact de mkfifo pour les sockets, c'est-à-dire qu'il n'y a pas de commande qui crée simplement un socket "en attente". Cela est dû à des raisons historiques : la fonction bind() du serveur, celle qui crée un nom de socket/inode 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 auparavant, il faudrait de toute façon le supprimer par le serveur en premier. Aucun avantage. Comme vous le constatez avec la réponse de Gregory, vous pouvez créer un socket SI vous gardez un serveur pour cela, tel que netcat. Une fois qu'un serveur est parti, l'ancien socket disparaît. Un nouveau serveur a un nouveau socket, et tous les clients doivent se reconnecter, malgré le nom du socket étant identique.

24voto

Karimai Points 211

Je utilise simplement netcat et reste à l'écoute dans ce cas :

nc -lkU aSocket.sock

vous devriez utiliser netcat-openbsd. netcat-traditional n'a pas de commutateur -U qui est pour Unix Domain socket.

19voto

akostadinov Points 1088

Vous pouvez utiliser python :

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

Aussi C, voir cette réponse.

17voto

Gregory MOUSSAT Points 1718

La plupart des dernières versions de netcat (nc) et de programmes similaires (comme socat que je sache) ont des options de socket de domaine.
Sinon, vous pouvez jeter un œil à ucspi-unix

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X