将套接字路由到另一个端口

JBe*_*rdo 5 c c++ sockets routing

我有一个系统,我想听一个套接字并等待客户端连接,然后将连接传递给另一个应用程序,我将在建立连接后立即启动.

我没有对这个其他应用程序的控制,只能设置它将侦听的端口,但我希望每个新客户端都有一个进程.

这就是我想要做的:

路由

我一直在寻找一个解决方案,但是我没有正确的术语,但是我设法在Richard Stevens的"Unix网络编程"中发现了一些关于AF_ROUTE套接字系列的信息,这些套接字可以与一个SOCK_RAW路由器相结合.连接到另一个IP和端口.但是关于如何使用这个标志的文档太少,似乎需要超级用户权限(我想避免).

也许有一个更简单的解决方案,但我可能使用了错误的术语.我明白要做什么?

dav*_*vec 0

我不认为你能够像你想要的那样“传递”套接字,特别是如果你无法更改和重新编译“APP”。套接字包括与它们所属进程相关联的各种管理开销(资源管理等)。此外,如果您无法重新编译APP,则无法使其绕过接受连接所涉及的步骤,并且简单地将已打开的连接“交给”您的路由器。

但是,您是否考虑过简单地使用路由器作为直通通道?基本上,让您的“路由器”进程通过套接字连接到它生成的每个“应用程序”进程,并简单地将它从适当的客户端收到的任何内容回显到适当的应用程序,反之亦然,从应用程序到客户端?

这确实增加了开销,并且您必须管理一个小映射来跟踪哪些客户端访问哪些应用程序,但它可能会起作用(假设应用程序或客户端没有基于它们所连接的 IP 地址进行任何行为) , ETC)。假设你无法重新编译APP,可能就没有太多其他选择了。

其代码相对简单。从 APP 接收到的数据的处理程序只需从映射中查找相应应用程序的套接字,然后在其上非阻塞发送该数据。同样,从客户端接收数据的处理程序。根据客户端和应用程序的具体行为方式,您可能必须处理一些同步(如果您同时从两者接收)。