【发布时间】:2011-03-15 13:54:09
【问题描述】:
所以我想知道 - 是否可以将接受的 TCP 连接(在 Windows 或 Unix 等操作系统上)从一个进程传递到另一个进程?这里的重点是传递连接——而不是像代理应用那样传递数据。
【问题讨论】:
标签: c++ tcp connection interprocess
所以我想知道 - 是否可以将接受的 TCP 连接(在 Windows 或 Unix 等操作系统上)从一个进程传递到另一个进程?这里的重点是传递连接——而不是像代理应用那样传递数据。
【问题讨论】:
标签: c++ tcp connection interprocess
在 Unix 中,TCP 连接表示为套接字文件描述符。当你fork一个进程时,文件描述符被子进程继承,包括TCP套接字。 (尽管如果给定带有fcntl 的FD_CLOEXEC 标志,它们可能会在exec 上关闭。)
也可以使用本地(Unix)域套接字在不相关的进程之间传输文件描述符;见this question。
我不确定 Windows。
【讨论】:
accept() 一个连接,你就可以对它做任何你想做的事情,包括将它发送到另一个本地进程。
在Windows上,使用WSADuplicateSocket,将填好的WSAPROTOCOL_INFO传递给其他进程,使用WSPSocket重新创建一个socket。
在类 unix 操作系统上,这可以使用sendmsg() 系统调用来实现。 libancillary 为你抽象了这个。
【讨论】: