【发布时间】:2021-08-27 09:04:01
【问题描述】:
据我了解,如果您在与 POSIX 相关的系统上创建一个套接字,然后生成一个继承该套接字 fd 的子代,显然您应该在该进程完成时在每个进程中对该 fd 调用 close ,因为 fd 是内部引用计数的,我想引用计数在 fork 上增加,close 然后再次减少。
这与 Windows 相同吗,您应该在每个拥有该套接字副本的进程中调用closesocket,还是只在一个进程中调用它,当所有进程都完成它时?
编辑:标记为与此问题重复的问题是相关的 (Are TCP SOCKET handles inheritable?),因为它表明继承 SOCKET 容易出错,但它也表明它仍然是可能的。在这种情况下,如果不管可能出现的错误仍然存在,那么如果这个问题有答案就好了;应该在所有进程中使用closesocket,还是仅在父进程中使用?
第二次编辑:我相信the documentation for WSADuplicateSocketA回答了这个问题:
进程可以在重复的套接字上调用 closesocket,描述符将被释放。然而,底层套接字将保持打开状态,直到最后一个剩余的描述符调用 closesocket。
【问题讨论】: