在 Linux 中的进程之间传输套接字
Posted
技术标签:
【中文标题】在 Linux 中的进程之间传输套接字【英文标题】:transfer socket between processes in Linux 【发布时间】:2015-11-16 16:20:38 【问题描述】:如何在 Linux 下的进程之间转移套接字的所有权? Windows 有一个Socket.DuplicateAndClose
函数,但有没有办法在 Linux 上做到这一点?
如果有什么不同,我想将所有权从父进程转移到子进程,并且在我获得套接字时子进程还没有启动,所以我很感兴趣涉及fork
和exec
系列函数的解决方案。
【问题讨论】:
【参考方案1】:子进程将继承文件描述符。因此,除了在 fork 孩子后关闭父级中的套接字之外,您无事可做。
如果您 exec
子级中的另一个可执行文件,您可能希望通过使用特定参数来通知它文件描述符值。
【讨论】:
【参考方案2】:鉴于您希望在创建套接字后生成子节点,因此没有传输。子进程继承父描述符。因此,父级只需关闭套接字即可将所有权传递给子级。
但是,要将新创建的套接字实际传递给现有进程,
您需要使用 辅助数据 接口来打包您的套接字,并使用sendmsg
和recvmsg
进行数据传输。 cmsg
手册页包含有关如何创建消息以进行传输的示例。
【讨论】:
以上是关于在 Linux 中的进程之间传输套接字的主要内容,如果未能解决你的问题,请参考以下文章