使用 socat 调用远程程序并等待其完成

使用 socat 调用远程程序并等待其完成

我需要x在服务器上调用一个程序来自客户端酒吧。程序x需要一些时间来加载,然后从 stdin 读取输入并将输出传输到 stdout,然后终止。我一直在尝试使用socat它来实现这一点。

在服务器上我进行了如下设置:

socat -lmlocal2 TCP-LISTEN:4444,fork,reuseaddr,linger=6 SYSTEM:x

为了调用命令,我在客户端运行此命令酒吧

echo "someinput" | socat - TCP:foo:4444

当我使用 -v 运行客户端时,我可以看到socat正在将数据传输到,如果我top继续我可以看到它正在调用x(启动需要一段时间),但是客户端酒吧无需等待x完成,socat在服务器上报告 I/O 错误。

如果我改变SYSTEM命令"SYSTEM:sleep 5; cat > /tmp/test ; echo 'done'",无论我发送多少输入,它都能正确读取并将其放入/tmp/test。输入全部通过网络传输并馈送到x,只是 的输出x丢失了。

如何让socat客户端保持打开状态直到x完成写入 stdout 并关闭它?我尝试添加linger=6到服务器,但没有帮助。

答案1

好的,我想我已经找到了:-t 10在两个客户端上都安装服务器,并且它们都将在收到客户端的 EOF 之后等待 10 秒,然后再关闭两个套接字。

专家提示:使用大量内容-d来了解​​ socat 在幕后所做的事情,并创建一个可以轻松重现的简单本地测试用例。

相关内容