gpt4 book ai didi

c - 如何将套接字从父进程传递给子进程

转载 作者:太空狗 更新时间:2023-10-29 16:45:59 25 4
gpt4 key购买 nike

我在 Linux 上的 C 程序中遇到了问题。

我知道当一个进程被 fork 时,子进程会从父进程继承一些东西,包括打开文件描述符。

问题是我正在编写一个多进程服务器应用程序,其主进程接受新连接并将描述符放入共享内存。

当子进程试图从共享内存中读取这些描述符之一时,在 select() 上我得到了一个 EBADF 错误!

子进程如何读取和使用由父进程创建的套接字(或一般的任何文件描述符)?

最佳答案

当您调用 fork 时,子进程会继承所有打开的文件描述符的副本。这样做的典型方法是父进程打开一个监听套接字,调用 accept 阻塞直到连接到达,然后在接收到连接后调用 fork。然后父进程关闭它的文件描述符副本,而新的子进程可以继续使用文件描述符并进行任何需要的处理。一旦子进程完成,它也会关闭套接字。记住两件事很重要: 1. 文件描述符/套接字是操作系统中的一种资源,在 fork 之后,父进程和子进程各自拥有该资源的句柄,这有点像引用计数智能指针。我解释这个in more detail here .第二件事是只有在调用 fork 之前打开的文件描述符是共享的,因为在 fork 之后父进程和子进程是完全独立的进程,即使它们可能共享一些资源,比如在调用 fork 之前就存在的文件描述符叉。如果您使用的模型希望父进程将工作分配给工作进程,那么您最好考虑使用线程,并且 a thread pool .

顺便说一句,你可以从Unix Network Programming下载很多不错的服务器和客户端示例。网站。

关于c - 如何将套接字从父进程传递给子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14427898/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com