AF_UNIX socket:我可以在进程之间传递套接字句柄吗?

时间:2009-11-05 20:10:33

标签: linux sockets popen

假设我创建了一个socketpair()并将其中一个套接字的句柄传递给一个生成的进程(popen),所述进程是否能够进行通信回到父母身边?

我看到的示例是使用fork()应用的,这超出了我当前项目的范围。

更新:我尝试了一个简单的测试:

  1. 客户端:socketpair,带有套接字[0]

  2. 从客户端使用带有套接字1posix_spawn作为命令行参数

  3. 客户:write到套接字...客户退出时没有任何警告......

  4. 这种方法似乎存在问题。

    更新:我还发现了note

    Pipes and socketpairs are limited to communication between processes with a common ancestor.

2 个答案:

答案 0 :(得分:2)

execve的手册页说明:

 File descriptors open in the calling process image remain open in the new
 process image, except for those for which the close-on-exec flag is set
 (see close(2) and fcntl(2)).  Descriptors that remain open are unaffected
 by execve().

因为像popen这样的函数是基于execve的,所以你从socketpair函数得到的文件描述符应该在两个进程中都很好,我不明白为什么你不能以任何方式传递描述符。我假设在这种情况下你的意思是将它转换为字符串并将其设置为STDIN到子进程,这将把它转换回int以用作文件描述符。

为...编写一些试用代码肯定是值得的。

答案 1 :(得分:0)

是的,您可以将其传递给子进程。诀窍是socketpair()给你一对连接的套接字 - 确保孩子保持一个,父母保持另一个(父母应该关闭孩子,反之亦然)。

大多数情况下使用一对管道。