我正在使用socat连接到服务器,并将传入的数据传输到可以由另一个进程读取的文件。这是单向数据(从服务器到接收过程)。
由于socat在我的服务器关闭或断开连接时退出,因此我正在使用一个循环,以便socat可以重新连接。我的代码在下面。
问题是,当socat重新连接时,它还会打开一个新文件以将数据写入其中,从dev / pts / 0到dev / pts / 1,可能是因为我的接收进程仍在打开文件以供读取。 / p>
读取过程不知道文件更改,因此无法读取将要进入新文件的数据。
重新连接后,是否有办法让socat继续写入同一文件?
还是其他可以更好地处理服务器重新连接的方法?
谢谢
我已经在这里咨询过类似的话题:
Reconnect socat connection after network failure
但这是一个稍微不同的问题。
我也尝试过使用fork方法,但是当我只想要一个连接时,我最终将多个子进程连接到服务器。 (我怀疑fork方法是作为socat作为服务器而不是作为客户端使用的。)
我的代码在这里:
#!/bin/bash
file="/dev/ttyv0"
while :
do
if [ -f "$file" ];then
cho "$file found,go to connect"
else
socat -d -d -U pty,link=/dev/ttyv0,raw,crnl tcp:192.168.0.161:9800
fi
done
再次感谢
答案 0 :(得分:0)
好吧,这就是我们想出的(经过测试并可以正常工作):
#!/bin/bash
socat pty,link=/dev/ttyv0,raw,crnl pty,link=/dev/ttyv1,raw,crnl
while true
do
socat -U open:/dev/ttyv1,raw,nonblock tcp:192.168.0.161:9800,forever
done
我们最终用两个文件运行了socat两次。
第二个socat从服务器读取文件1。
第一个socat从文件1读取到文件0。
读取器进程从文件0中读取数据。
这两个文件始终存在,并且无论任何服务器重新启动,读取器进程始终可以从同一文件读取。
此解决方案对GC的称赞。