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


Ответы:


21

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

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


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')"

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


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.


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