Створіть Unix Named Socket з командного рядка


Відповіді:


21

Немає точного еквівалента mkfifo для socket, тобто немає команди, яка просто створює "висячий" сокет. Це з історичної причини: функція сервера bind (), яка створює ім'я сокета / inode у файловій системі, відмовляється, якщо ім'я вже використано. Іншими словами, сервер не може працювати на раніше існуючому сокеті.

Отже, якщо ви створили сокет раніше, його потрібно все-таки видалити сервером. Ніякої вигоди. Як ви бачите з відповіддю Грегорі, ви можете створити сокет, якщо ви будете зберігати для нього сервер, такий як netcat. Як тільки сервер відсутній, старий сокет зник. На новому сервері є новий сокет, і всі клієнти повинні знову підключитися, незважаючи на те, що назва сокета однакова.


15

Більшість останніх netcat (nc) та подібних програм (наскільки я знаю) socat мають варіанти сокетів домену.
Інше, ви можете подивитися на ucspi-unix


1
+1 для ncBSD.
Клінт Пахл

1
Про Debian:# sudo apt-get install netcat-openbsd
Доктор Кутейр Аттучі

2
ок, як тільки ви це встановите, як створити "файл сокета"
Олександр Міллс

8

Ви можете використовувати python:

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

Також С, дивіться цю відповідь .


mksock() { SOCK="$1" python -c "import os, socket as s; s.socket(s.AF_UNIX).bind(os.environ['SOCK'])"; }для зручного використання оболонок: mksock /tmp/test.sock
Tino

0

Я просто використовую netcatта слухаю в такому випадку:

nc -lkU aSocket.sock

ви повинні використовувати netcat-openbsd . netcat-tradicional не має -Uкомутатора, який призначений для сокета Unix Domain.


-k Змушує nc продовжувати слухати інше з'єднання після завершення поточного з'єднання. Помилка використання цієї опції без параметра -l. -U Зазначає використання розеток домену UNIX.
Йохан Буле
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.