首页 > 解决方案 > 父母和孩子的closesocket?

问题描述

据我了解,如果您在与 POSIX 相关的系统上创建一个套接字,然后生成一个继承该套接字 fd 的子节点,显然您应该close在每个进程完成该进程时调用该 fd,因为 fd 在内部引用计数,我想引用计数在 上递增forkclose然后再次递减。

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

编辑:标记为这个重复的问题是相关的(TCP SOCKET 处理可继承吗?),因为它表明继承 SOCKET 容易出错,但它也表明它仍然是可能的。在这种情况下,如果一个人不管可能出现的错误仍然存​​在,那么如果这个问题有答案就好了;应该是closesocket所有进程中的一个,还是只是父进程?

第二次编辑:我相信这个问题在文档中WSADuplicateSocketA得到了回答:

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

标签: cwindowswinsock2

解决方案


您不应该将 Windows 上的套接字视为文件描述符,因此它们不会以相同的方式被继承。有关您的问题的完整答案,请参阅此链接:TCP SOCKET 句柄是否可继承?


推荐阅读