微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

父母和孩子的closesocket?

如何解决父母和孩子的closesocket?

据我所知,如果您在与 POSIX 相关的系统上创建一个套接字,然后生成一个继承该套接字 fd 的子进程,显然您应该在每个进程中调用 close 在该进程完成后的那个 fd使用它,因为 fd 是内部引用计数,我想引用计数在 fork 上递增,然后 close 再次递减它。

这与 Windows 是否相同,您应该在每个拥有该套接字副本的进程中调用 closesocket,还是只在一个进程中调用它,当所有进程都使用它?

编辑:标记为与此问题重复的问题是相关的 (Are TCP SOCKET handles inheritable?),因为它表明继承 SOCKET 容易出错,但也表明它仍然是可能的.在这种情况下,如果一个人不顾可能的错误而坚持下去,那么如果这个问题有答案就好了;应该在所有进程中使用一个 closesocket,还是只使用父进程?

第二次编辑:我相信在the documentation for WSADuplicateSocketA中回答了这个问题:

进程可以在重复的套接字上调用 closesocket 并且描述符将被释放。然而,底层套接字将保持打开状态,直到最后一个剩余的描述符调用 closesocket。

解决方法

您不应该将 Windows 上的套接字视为文件描述符,因此它们不会以相同的方式被继承。请参阅此链接以获取您问题的完整答案:Are TCP SOCKET handles inheritable?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。