Есть ли команда, похожая на mkfifo, но для доменных сокетов?
Есть ли команда, похожая на mkfifo, но для доменных сокетов?
Ответы:
Для сокета нет точного эквивалента mkfifo, то есть нет команды, которая просто создает «зависший» сокет. Это по исторической причине: серверная функция bind (), которая создает имя / индекс сокета в файловой системе, завершается ошибкой, если имя уже используется. Другими словами, сервер не может работать с уже существующим сокетом.
Так что, если вы создали сокет ранее, он все равно сначала должен быть удален сервером. Нет пользы. Как видно из ответа Грегори, вы можете создать сокет, ЕСЛИ у вас есть для него сервер, например netcat. Как только сервер исчез, старый сокет исчез. Новый сервер имеет новый сокет, и все клиенты должны повторно подключиться, несмотря на то, что имя сокета идентично.
В большинстве последних программ netcat (nc) и аналогичных (насколько я знаю, socat) есть опции сокетов доменов.
Иначе, вы можете взглянуть на ucspi-unix
# sudo apt-get install netcat-openbsd
Вы можете использовать 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
Я просто использую netcat
и продолжаю слушать в таком случае:
nc -lkU aSocket.sock
Вы должны использовать netcat-openbsd . У netcat-Traditional нет -U
переключателя, который предназначен для сокета Unix Domain.
nc
на BSD.