我正在尝试使用 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:5000
,TCP-LISTEN:5000,reuseaddr
但问题可能只是,例如,在测试期间您中断了ssh
,Control-C而这并没有停止远程上的 socat。
socat
请注意,您可以通过简单地请求它fork
并再次侦听新连接来避免重复启动以再次执行相同的操作:
socat -u TCP-LISTEN:5000,reuseaddr,fork OPEN:foo.test,creat