linux - socat 作为客户端必须重新连接到服务器并继续使用相同的 pty 文件
问题描述
我正在使用 socat 连接到服务器并将传入的数据传输到另一个进程可以读取的文件。这是单向数据(从服务器到接收进程)。
因为当我的服务器出现故障或断开连接时 socat 会退出,所以我使用了一个循环,以便 socat 可以重新连接。我的代码如下。
问题是当 socat 重新连接时,它还会打开一个新文件来写入数据,从 dev/pts/0 到 dev/pts/1,可能是因为我的接收进程仍然打开文件以供读取。
读取过程不知道文件更改,因此无法读取进入新文件的数据。
有没有办法让 socat 在重新连接后继续写入同一个文件?
或者其他可以更好地处理服务器重新连接的方法?
谢谢
我已经在这里咨询过类似的话题:
但这是一个稍微不同的问题。
我也尝试过使用 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
再次感谢
解决方案
好的,这就是我们想出的(测试和工作):
#!/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 表示赞赏。