【发布时间】:2014-02-06 13:33:58
【问题描述】:
我有一个父进程侦听套接字上的传入连接,在接受客户端后,它会将关联的文件描述符和其他日期传递给子进程(通过命名管道)。
从这一刻起,子进程将为客户端提供服务,父进程继续监听新的客户端。
我的问题是,当我尝试在子进程中写入文件描述符时,我会收到错误(错误的文件描述符)并且写入失败。我的猜测是,由于这些文件描述符是在 fork 之后创建的,因此子进程不能简单地使用它们,它们只属于父进程。
所以这是写失败的原因吗?有没有办法让孩子使用这些文件描述符?
解决方案
正如 loreb 在回答中提到的那样,以这种方式不可能达到预期的结果。我通过使用另一个管道将响应从孩子定向到父母进行了临时修复。由于文件描述符属于父级,它可以通过套接字将响应转发回客户端。
【问题讨论】:
-
为什么不在父进程中创建套接字,以便在父子进程之间共享文件描述符..
-
@Abhiteshkhatri 因为我的客户端将在分叉发生后继续连接,并且分叉后创建的文件描述符不会在父子之间共享。
-
您可以在 fork 之前创建共享内存并将文件描述符保存在共享内存上(我怀疑如何将文件描述符放在共享内存上)。如果是这样,那么您的描述符将在孩子和父母之间共享..
-
不幸的是,对于这个特定的任务,我们不允许使用共享内存,而且我之前没有处理过在共享内存上存储文件描述符的问题。所以我不确定我们是否可以在这里使用共享内存。
标签: c++ unix process fork file-descriptor