Socat переадресация на несколько адресов
У меня есть один входящий видеопоток, и я хотел бы настроить несколько процессов для его обработки, каждый из которых работает по своему адресу. После некоторого чтения кажется, что socat - один из способов сделать это
socat TCP4-LISTEN:1934,fork,reuseaddr TCP4:someaddress:1935
Это перенаправляет все на целевой адрес, но позволяет мне связать только одну цель. Есть ли способ связать несколько целевых адресов с помощью socat? Если я пробую несколько отдельных привязок, я получаю ошибку "адрес уже используется" при последующих привязках. Я не обязан использовать socat, все, что позволяет мне копировать мой входящий поток, хорошо, если кто-нибудь знает лучший подход. Благодарю.
2 ответа
Основываясь на моих предыдущих комментариях, я только что протестировал это решение [1], и оно работает как положено, если я понял ваши потребности:
socat -u tcp4-listen:1934 - | tee >(socat - tcp4:127.0.0.1:1935) >(socat - tcp4:127.0.0.1:1936) > /dev/null
Должны быть процессы, уже слушающие 1935 и 1936 гг., Прежде чем запустить это, иначе socat
справа будет жаловаться.
Это все еще очень хрупкое решение. Я бы посоветовал попробовать альтернативные маршруты, например, временный файл кэширования или канал.
[1] вот так:
nc -l 127.0.0.1 1935
в оболочкеnc -l 127.0.0.1 1936
в другой оболочке- команда выше в третьей оболочке
- а затем в четвертом:
echo "foobar" | nc 127.0.0.1 1934
- и я вижу "foobar" в выводе в первой и второй оболочке.
Можете ли вы инициировать socat в пункте назначения (пунктах)?
Просто использовалsocat -d -d -b67108864 -U TCP4-LISTEN:65431,tcpwrap,tcpwrap-etc=.,reuseaddr,fork OPEN:filename
с hosts.allow в текущем каталоге, имеющим строку:socat: address address address address
-U меняет направление, чтобы сервер прослушивал.
socat TCP:server:65431 - |
.......... в пункте назначения(ах).