close() 和 close socket() 可以互换吗?

Are close() and closesocket() interchangable?

我在这里看到很多答案都说要使用 close() 来破坏套接字,但我在 msdn 中使用的指南让我使用 closesocket()。我想知道是否存在差异,是否有理由使用其中之一。

在这两种情况下,我都看到了使用 shutdown() 的建议,所以一切都很好。

close() 是一个 *nix 函数。它适用于任何文件描述符,*nix 中的套接字是文件描述符的示例,因此它也可以正确关闭套接字。

closesocket() 是一个特定于 Windows 的函数,它专门用于套接字。 Windows 上的套接字不使用 *nix 样式的文件描述符,而是 socket() returns 内核对象的句柄,因此必须使用 closesocket().[=17 关闭它=]

我觉得 BSD 套接字不包含 socket 功能的特定对应物是相当可耻的,该功能可以在任何地方使用 - 但这就是生活。

最后但并非最不重要的一点是,不要混淆 shutdown 设置套接字与关闭套接字。 shutdown() 停止套接字上的传输,但套接字仍保留在系统中,并且与其关联的所有资源都保留。关闭后还需要关闭socket。