c - 父母和孩子的closesocket?
问题描述
据我了解,如果您在与 POSIX 相关的系统上创建一个套接字,然后生成一个继承该套接字 fd 的子节点,显然您应该close
在每个进程完成该进程时调用该 fd,因为 fd 在内部引用计数,我想引用计数在 上递增fork
,close
然后再次递减。
这与 Windows 是否相同,您应该调用closesocket
具有该套接字副本的每个进程,还是只在一个进程中调用它,当所有进程都使用它时?
编辑:标记为这个重复的问题是相关的(TCP SOCKET 处理可继承吗?),因为它表明继承 SOCKET 容易出错,但它也表明它仍然是可能的。在这种情况下,如果一个人不管可能出现的错误仍然存在,那么如果这个问题有答案就好了;应该是closesocket
所有进程中的一个,还是只是父进程?
第二次编辑:我相信这个问题在文档中WSADuplicateSocketA
得到了回答:
进程可以在重复的套接字上调用 closesocket 并且描述符将被释放。然而,底层套接字将保持打开状态,直到最后一个剩余描述符调用 closesocket。
解决方案
您不应该将 Windows 上的套接字视为文件描述符,因此它们不会以相同的方式被继承。有关您的问题的完整答案,请参阅此链接:TCP SOCKET 句柄是否可继承?
推荐阅读
- java - Rxjava2 组合多个操作
- swift - 如何在 Swift 代码中以非零退出状态终止
- css - 如何修复bulma css在768点中断后制作单列布局,平板设备应该是2列布局?
- excel - 如何提取第一个非空白单元格数据(数字)并从列中继续提取,第一,第二,第三等,并提取到一行
- sql - 批量加载数据转换错误 (EMP_TITLE)
- javascript - 如何为连接范围设置不同的边距和限制
- xamarin.forms - Xamarin Forms 获取设备 IP 地址
- jquery - 如何从表单中动态收集值
- amazon-web-services - 网页资源请求在 Chrome 中停滞了近一分钟
- javascript - 为什么可拖动对动态创建的元素不起作用?