5

我有一个系统,我想在其中侦听套接字并等待客户端连接,然后将连接传递给另一个应用程序,一旦建立连接,我就会启动该应用程序。

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

这就是我想要做的:

路由

我一直在寻找解决方案,但我觉得我没有正确的术语,但我设法在 Richard Stevens 的“Unix 网络编程”中找到了一些关于AF_ROUTE套接字系列的东西,这些套接字可以与SOCK_RAW路由 a连接到另一个 IP 和端口。但是关于如何使用这个标志的文档太少了,而且似乎需要超级用户权限(我想避免)。

也许有一个更简单的解决方案,但我可能使用了错误的术语。清楚我想做什么吗?

4

1 回答 1

0

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

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

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

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

于 2012-10-22T20:31:40.187 回答