【问题标题】: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 等操作系统上)从一个进程传递到另一个进程?这里的重点是传递连接——而不是像代理应用那样传递数据。

【问题讨论】:

    标签: c++ tcp connection interprocess


    【解决方案1】:

    在 Unix 中,TCP 连接表示为套接字文件描述符。当你fork一个进程时,文件描述符被子进程继承,包括TCP套接字。 (尽管如果给定带有fcntlFD_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 创建一个示例... 目前至少在一个进程内stackoverflow.com/questions/5326564/… 可能你可以看看并提供任何帮助?请)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    相关资源
    最近更新 更多