在 Linux 中的进程之间传输套接字

transfer socket between processes in Linux

如何在 Linux 下的进程之间转移套接字的所有权? Windows 有一个 Socket.DuplicateAndClose 函数,但是有没有办法在 Linux 上做到这一点?

如果有区别,我想把所有权从父进程转移到子进程,而子进程在我获得套接字时还没有启动,所以我打开到涉及 forkexec 函数族的有趣解决方案。

子进程将继承文件描述符。因此,除了在分叉子项后关闭父项中的套接字外,您无事可做。

如果您 exec 子进程中的另一个可执行文件,您可能希望使用特定参数将文件描述符值告知它。

鉴于您希望在创建套接字后生成 child,因此没有传输。 Child 个进程继承了 parent 个描述符。因此,parent 只需关闭套接字即可将所有权传递给 child。

但是,要将新创建的套接字实际传递给现有进程, 您需要使用辅助数据接口来打包您的套接字,sendmsg and recvmsg to do the data transfer. The cmsg手册页包含如何创建消息的示例进行转移。