Создать Unix Named Socket из командной строки

Ответы:

21

Для сокета нет точного эквивалента mkfifo, то есть нет команды, которая просто создает «зависший» сокет. Это по исторической причине: серверная функция bind (), которая создает имя / индекс сокета в файловой системе, завершается ошибкой, если имя уже используется. Другими словами, сервер не может работать с уже существующим сокетом.

Так что, если вы создали сокет ранее, он все равно сначала должен быть удален сервером. Нет пользы. Как видно из ответа Грегори, вы можете создать сокет, ЕСЛИ у вас есть для него сервер, например netcat. Как только сервер исчез, старый сокет исчез. Новый сервер имеет новый сокет, и все клиенты должны повторно подключиться, несмотря на то, что имя сокета идентично.

kubanczyk
источник
15

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

Грегори МУССАТ
источник
1
+1 за ncна BSD.
Клинт Пахл
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')"

Также С, смотрите этот ответ .

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

Я просто использую netcatи продолжаю слушать в таком случае:

nc -lkU aSocket.sock

Вы должны использовать netcat-openbsd . У netcat-Traditional нет -Uпереключателя, который предназначен для сокета Unix Domain.

Karimai
источник
-k Принудительно заставляет nc прослушивать другое соединение после завершения его текущего соединения. Ошибочно использовать эту опцию без опции -l. -U Указывает использовать сокеты домена UNIX.
Йохан Буле