首页 文章

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

提问于
浏览
0

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

从此刻起,子进程将为客户端提供服务,父进程不断监听新客户端 .

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

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

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

2 回答

  • 0

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

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

  • 0

    也许你应该试着关闭并重新开放那个FD .

相关问题