我有一个旧的遗留应用程序,我正试图与我们的半现代网络工作。此应用程序以HTTP请求的形式发送日志消息(每个请求一个日志),但通过一个TCP连接发送。如果TCP连接死了,日志就会被弄乱,因为它们没有队列。
我决定使用socat尝试打开TCP会话,同时将另一端的HTTP请求中断以供进一步处理。我有这样的事情:
socat tcp-listen:8888 tcp-connect:logserver:80问题在于,当侦听“logserver”的web服务器从socat接收HTTP连接时,它会撕毁其TCP连接,从而导致套接字撕毁应用服务器希望打开的侦听套接字。
我如何使socat在上行端重新连接,然后继续从侦听器那里推送数据?
我试着用“叉子”来听,但这仍然会破坏连接。我几乎想在tcp连接端添加“叉”,但这似乎是不允许的。
发布于 2023-05-12 11:20:08
在Socat命令的顶部:“当其中一个流有效地到达EOF时,关闭阶段开始。Socat将EOF条件传输到另一个流(…)。”。寻找"EOF“在这方面找到更有帮助的提示。
因此,如果您想让socat保持侦听功能,那么添加fork,reuseaddr。
如果日志服务器没有可靠的应答,您可以使用例如retry,interval=.2,forever重试socat连接。
socat tcp-listen:8888,fork,reuseaddr tcp-connect:logserver:80,retry,interval=.2,forever我还喜欢运行带有socat -d -d -d的套接字,以便在尝试让它们正常工作的同时调试它们。
https://serverfault.com/questions/1130955
复制相似问题