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

Posted

技术标签:

【中文标题】在 Linux 中的进程之间传输套接字【英文标题】:transfer socket between processes in Linux 【发布时间】:2015-11-16 16:20:38 【问题描述】:

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

如果有什么不同,我想将所有权从父进程转移到子进程,并且在我获得套接字时子进程还没有启动,所以我很感兴趣涉及forkexec 系列函数的解决方案。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

但是,要将新创建的套接字实际传递给现有进程, 您需要使用 辅助数据 接口来打包您的套接字,并使用sendmsgrecvmsg 进行数据传输。 cmsg 手册页包含有关如何创建消息以进行传输的示例。

【讨论】:

以上是关于在 Linux 中的进程之间传输套接字的主要内容,如果未能解决你的问题,请参考以下文章

使用套接字传输文件服务器/客户端 linux C

使用 ObjectStreams 通过套接字发送列表

在不相关的进程之间共享套接字(监听)

套接字socket

socket (套接字)

socket (套接字)