Socat 无法通过 ssh 自行清理干净

Socat 无法通过 ssh 自行清理干净

我正在尝试使用 ssh、socat 和我制作的另一个实用程序与连接到本地计算机的计算机进行通信。

在源机器上我正在做:

ssh root@localhost -p 2004 'socat -u TCP-LISTEN:5000 OPEN:foo.test,creat'

(使用我当前正在运行的实用程序将 4000 映射到 5000,与问题无关)然后执行以下操作:

socat -d -d TCP:localhost:4000 ./some_file

文件传输正确发生,问题是我需要快速连续执行这些类型的操作,并且初始socat TCP-LISTEN服务器设置没有完全退出,我猜是因为我需要等到端口清理,否则我会收到以下错误:

2016/05/14 11:56:01 socat[655] E bind(3, {LEN=0 AF=2 0.0.0.0:5000}, 16): Address already in use

我是否缺少一个 socat 选项,可以在任何类型的出口上干净地清理?我基本上需要这个来进行文件传输,我只需要远程计算机上的 socat 关闭一次。

编辑:我故意必须使用,ssh因为每次的文件路径OPEN都不同,并且必须快速完成,一个接一个。

答案1

您可以更改为TCP-LISTEN:5000TCP-LISTEN:5000,reuseaddr但问题可能只是,例如,在测试期间您中断了sshControl-C而这并没有停止远程上的 socat。

socat请注意,您可以通过简单地请求它fork并再次侦听新连接来避免重复启动以再次执行相同的操作:

socat -u TCP-LISTEN:5000,reuseaddr,fork OPEN:foo.test,creat

相关内容