我在这里看到很多答案,说使用close()来销毁套接字,但我使用msdn的指南让我使用了closesocket()。我想知道是否存在差异以及是否有理由使用其中一种。
在这两种情况下,我都看到了使用shutdown()的建议,所以这一切都很好。
答案 0 :(得分:14)
close()
是* nix函数。它适用于任何文件描述符,* nix中的套接字是文件描述符的一个示例,因此它也可以正确关闭套接字。
closesocket()
是一个特定于Windows的函数,专门用于套接字。 Windows上的套接字不使用* nix样式的文件描述符,socket()
会返回内核对象的句柄,因此必须使用closesocket()
关闭它。
我觉得BSD套接字不包含socket
函数的特定对应部分,这可以在任何地方使用,但我觉得很可耻。但这就是生命。
最后,但并非最不重要,不要混淆shutdown
插槽与关闭套接字。 shutdown()
停止套接字上的传输,但套接字保留在系统中,并且与之关联的所有资源都保留。关闭后仍然需要关闭套接字。