socat,因为客户端必须重新连接到服务器并继续使用相同的pty文件

时间:2018-12-06 17:29:50

标签: linux socat

我正在使用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

再次感谢

1 个答案:

答案 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的称赞。