父母和分叉儿童之间的文件描述符共享
我是网络编程的初学者..
我遵循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之前,您仍然能够接收数据. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Bootstrap 3时间控件datetimepicker的时区及多语
- angluarjs中页面初始化的时候会出现语法{{}}在页
- angularjs – 如何在选择选项后从ui-select中删除
- docker commit命令-提交一个新的image
- twitter-bootstrap-3 – 如何让bootstrap的工具提
- angularjs ckeditor指令有时无法从服务加载数据
- scala – 如何在IntelliJ IDEA 14社区版中创建Pl
- 使用.NET向webService传double、int、DateTime 服
- vim正则表达式和普通正则表达式有什么区别?
- 使用错误的Scala版本创建Spark应用程序