Есть ли способ заставить socat не открывать целевое соединение, пока оно не получит соединение прослушивателя?

Я хочу запустить socat в качестве сервера – против цели, которая будет перемещаться вверх и вниз с перерывами (среда облачного микросервиса).

Я хочу, чтобы socat слушал – и откройте порт, когда он получит соединение прослушивателя. (Сервер сотата)

Мой вопрос: есть ли способ заставить socat не открывать целевое соединение, пока оно не получит соединение прослушивателя?

Это значение по умолчанию, если я понимаю ваш вопрос. Первый сокет открывается и блокируется при прослушивании. Только при подключении будет предпринята попытка получения второго имени. Вы можете проверить это. Например, послушайте порт 60127 и подключитесь к порту 60128 в одной оболочке:

$ socat tcp-l:60127,reuseaddr tcp:localhost:60128 

Это заблокирует ожидание. В другой оболочке попробуйте подключиться:

 $ telnet localhost 60127 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host. 

Он терпит неудачу, и исходная команда тоже не работает:

 socat[30293] E connect(3, AF=2 127.0.0.1:60128, 16): Connection refused 

Если, однако, вы повторите первый сомат, затем добавьте еще один порт 60128:

 $ socat tcp-l:60128,reuseaddr - 

то telnet будет работать. Таким образом, очевидно, что первый солат не пытается использовать второе имя до тех пор, пока это не понадобится.