加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

父母和分叉儿童之间的文件描述符共享

发布时间:2020-12-16 01:56:54 所属栏目:安全 来源:网络整理
导读:我是网络编程的初学者.. 我遵循stevens并可靠地实施UDP服务器. 我有个问题. 当孩子分叉时,孩子的父插座fd会发生什么…?我读到他们得到了继承,这意味着我们在父母和孩子中有两个套接字fd副本?我们需要在子节点中关闭继承的父套接字fd(stevens代码不会这样做
我是网络编程的初学者..

我遵循stevens并可靠地实施UDP服务器.

我有个问题.

当孩子分叉时,孩子的父插座fd会发生什么…?我读到他们得到了继承,这意味着我们在父母和孩子中有两个套接字fd副本?我们需要在子节点中关闭继承的父套接字fd(stevens代码不会这样做)

如何在子节点中关闭父节点fds(使用close()??)而不是客户机请求到达的套接字(我应该保持打开状态)?

如果我天真…请原谅.

谢谢您的帮助 !!

解决方法

文件描述符的确是“继承”分叉的时候,但仅就他们在做什么插座连接,并关闭文件描述符只会关闭套接字,如果是与插座(或文件相关联的最后一个,如果我们处理文件).

你通常做的是你建立套接字,然后你分叉.在父进程(fork返回非零)的过程中,您可以继续使用close(fd)关闭文件描述符,如果不这样做,您最终将在父进程中耗尽文件描述符.这适用于流(例如TCP)套接字,其中有一个服务器套接字侦听连接,每个已建立连接有一个套接字.但是,您使用的是UDP,因此实际上只有一个套接字,如果您打算在父进程中继续使用它,则需要弄清楚如何在父进程和子进程之间共享它.两者都可以继续使用它,但它几乎是随机的,它会读取内容以及发送内容的顺序.在这种情况下,你通常有某种复用过程中,接收的数据包,并将其转发给适当的儿童(每其他一些机构,如管道或其它插座)的基础上的一些信息内容(在TCP,它的源IP / port和destination ip / port tuple).

正如Matt指出的那样,使用shutdown实际上会使所有涉及的套接字无法使用(通常是不可写的,但你可以指定它).在TCP中,这可以触发FIN数据包的发送,有效地启动连接的拆除,但是在远程端确认FIN之前,您仍然能够接收数据.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读