我正在实现一个Web服务器,我需要让父进程执行以下操作:
fork()
新工作进程(池)开头。accept()
函数返回)放入队列。并且工作进程将执行以下操作:
浏览并搜索互联网后,我发现我可以通过UNIX Domain Socket
或Pipes
在不同进程之间发送文件描述符。但不幸的是,我只能同步这样做! (我可以一次发送一个fd
,我不能把它放在等待队列中)
所以,我的问题是:
答案 0 :(得分:2)
文件描述符只是整数。它们用于索引由内核维护的每个进程的文件信息表。您不能指望文件描述符“可移植”到其他进程。
如果你在调用fork()
之前创建文件,它会(稍微)工作,因为文件描述符表是进程的一部分,因此clone()
d当孩子是创建。对于在进程拆分后分配的文件描述符,例如使用accept()
获取新套接字时,您无法执行此操作。
更新:似乎有一种方法,使用sendmsg()
和AF_UNIX套接字,请参阅here,了解this question中提到的详细信息。我不知道,听起来有点“神奇”,但显然这是一个完善的机制,所以为什么不继续实施呢。
答案 1 :(得分:1)