将已建立的TCP连接转发到另一个端口上的另一个进程?

时间:2013-08-29 16:35:17

标签: c linux sockets debian system-calls

在Linux计算机上,您有一个侦听TCP端口 A 的守护程序。但是,它通常会停止,因为它很少使用并占用大量系统资源。相反,我想做这样的事情:

对侦听端口 B 的应用程序进行编码,并在建立连接后立即执行以下操作:如果守护程序已停止,请启动它并等待侦听端口 A < / strong>即可。现在困难的部分:以完全透明的方式将客户端连接到守护进程,即客户端不必重新连接端口 A 。此外,但这与此问题无关,应用程序将在一段时间内没有连接时关闭守护程序。

当然,我可以让我的应用程序连接到守护进程并管道所有通信。我不要那个。我想要一些方法将已建立的连接转发到守护进程,然后摆脱连接的套接字,而客户端现在很高兴与守护进程连接。在某种程度上,我想给守护进程的进程已连接的套接字。有没有办法做这样的事情?

我正在运行Debian,如果这很重要的话。我想用C / C ++编写应用程序代码,并且可以使用特定于操作系统的解决方案(即使用系统调用)。请原谅我,我不是一个Linux编码器,所以我对Linux系统编程不是很熟悉。如果有一些明显的方法可以做到,我根本就不知道。

当然,我愿意接受任何建议。

1 个答案:

答案 0 :(得分:2)

此问题有一个预先存在的标准解决方案,通常称为inetd。它已经存在了 long 时间,首先是在Unix系统中,然后是Linux。

更现代的实施是xinetd