Child在fork之后写入父文件中创建的文件描述符

时间:2014-01-17 09:26:50

标签: c++ unix process fork file-descriptor

我有一个父进程,它监听套接字上的传入连接,并且在接受客户端后,它会将相关的文件描述符和其他日期传递给子进程(通过命名管道)。

从现在开始,子进程将为客户提供服务,父母不断监听新客户。

我的问题是,当我尝试在子进程中写入文件描述符时,我将收到错误(错误的文件描述符)并且写入失败。我的猜测是,因为这些文件描述符是在fork之后创建的,所以child不能简单地使用它们,它们只属于父进程。

这是写失败的原因吗?孩子有没有办法使用这些文件描述符?


的解决方案
正如loreb在答案中提到的那样,不可能以这种方式达到预期的结果。我通过使用另一个管道将响应从子节点引导到父节点来进行临时修复。由于文件描述符属于父级,因此它可以通过套接字将响应转发回客户端。

2 个答案:

答案 0 :(得分:0)

要传递文件描述符,您需要AF_UNIX套接字,而不是命名管道。 你需要sendmsg(3),这是非常奇怪的使用,所以你最好在网上查找一些例子 - 例如libowfat中的io_passfd。

编辑:如果有人发现这个答案,请不要使用AF_UNIX客户端/服务器,请使用socketpair(2)

答案 1 :(得分:0)

也许您应该尝试关闭并重新打开该FD。