C++ 应用程序:是不是可以将接受的 TCP 连接从一个进程传递到另一个进程?
Posted
技术标签:
【中文标题】C++ 应用程序:是不是可以将接受的 TCP 连接从一个进程传递到另一个进程?【英文标题】:C++ application: Is it possible to pass accepted TCP connection from one process to another?C++ 应用程序:是否可以将接受的 TCP 连接从一个进程传递到另一个进程? 【发布时间】:2011-03-15 13:54:09 【问题描述】:所以我想知道 - 是否可以将接受的 TCP 连接(在 Windows 或 Unix 等操作系统上)从一个进程传递到另一个进程?这里的重点是传递连接——而不是像代理应用那样传递数据。
【问题讨论】:
【参考方案1】:在 Unix 中,TCP 连接表示为套接字文件描述符。当你fork
一个进程时,文件描述符被子进程继承,包括TCP套接字。 (尽管如果给定带有fcntl
的FD_CLOEXEC
标志,它们可能会在exec
上关闭。)
也可以使用本地(Unix)域套接字在不相关的进程之间传输文件描述符;见this question。
我不确定 Windows。
【讨论】:
这是什么意思?两个进程将共享相同的连接? @Andrey:是的,所以他们必须协调他们对连接的访问。 @Andry - 套接字只是一个文件描述符。一旦你accept()
一个连接,你就可以对它做任何你想做的事情,包括将它发送到另一个本地进程。
套接字不是 Windows 上的文件描述符。【参考方案2】:
在Windows上,使用WSADuplicateSocket
,将填好的WSAPROTOCOL_INFO
传递给其他进程,使用WSPSocket
重新创建一个socket。
在类 unix 操作系统上,这可以使用sendmsg()
系统调用来实现。 libancillary 为你抽象了这个。
【讨论】:
有没有类似 libancillary for windows 的库?是否有任何关于如何在 Windows 上执行此类操作的代码示例/示例? 不知道任何库 - 我唯一一次必须这样做,我只是从头开始编写它。见msdn.microsoft.com/en-us/library/ms740478%28v=vs.85%29.aspx 所以.. 我尝试使用 Boost.ASIO 和 Windows WSADuplicateSocket 创建一个示例... 目前至少在一个进程内***.com/questions/5326564/… 可能你可以看看并提供任何帮助?请)以上是关于C++ 应用程序:是不是可以将接受的 TCP 连接从一个进程传递到另一个进程?的主要内容,如果未能解决你的问题,请参考以下文章
Docker:服务器是不是在主机“localhost”(::1) 上运行并接受端口 5432 上的 TCP/IP 连接?
服务器是不是在主机“localhost”(127.0.0.1) 上运行并接受端口 5432 上的 TCP/IP 连接?