![有没有办法让 socat 在收到侦听器连接之前不打开目标连接?](https://linux22.com/image/96643/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E8%AE%A9%20socat%20%E5%9C%A8%E6%94%B6%E5%88%B0%E4%BE%A6%E5%90%AC%E5%99%A8%E8%BF%9E%E6%8E%A5%E4%B9%8B%E5%89%8D%E4%B8%8D%E6%89%93%E5%BC%80%E7%9B%AE%E6%A0%87%E8%BF%9E%E6%8E%A5%EF%BC%9F.png)
我想将 socat 作为服务器运行 - 针对间歇性上升和下降的目标(云微服务环境)。
我希望 socat 进行侦听 - 并在获得侦听器连接时打开端口。 (socat 服务器)
我的问题是:有没有办法让 socat 在收到侦听器连接之前不打开目标连接?
答案1
如果我理解你的问题,这是默认的。第一个套接字打开并阻塞在监听中。仅当建立连接时,才会尝试第二个指定的连接。你可以测试一下。例如,在一个 shell 中监听端口 60127 并连接到端口 60128:
$ socat tcp-l:60127,reuseaddr tcp:localhost:60128
它会阻塞等待。在另一个 shell 中尝试连接:
$ 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
但是,如果您重复第一个 socat,则在端口 60128 上添加另一个 socat:
$ socat tcp-l:60128,reuseaddr -
然后telnet就可以工作了。因此,显然第一个 socat 在需要时不会尝试第二个命名的连接。