我在这里看到了很多使用close()销毁套接字的答案,但我在msdn中使用的指南告诉我使用closesocket()。我想知道是否有区别,是否有理由使用其中之一。
在这两种情况下,我都看到了使用shutdown()的建议,所以这一切都很好。
发布于 2016-02-17 04:04:05
close()是一个*nix函数。它可以在任何文件描述符上工作,而*nix中的套接字是文件描述符的一个示例,因此它也可以正确地关闭套接字。
closesocket()是一个特定于Windows的函数,它专门与套接字一起使用。closesocket()不使用*nix样式的文件描述符,而是返回内核对象的句柄,因此必须用套接字关闭。
我发现BSD-socket没有包括socket函数的特定副本,这是相当可耻的,因为它可以在任何地方使用-但这就是生活。
最后但并非最不重要的一点是,不要将shutdown与关闭套接字混淆。shutdown()会在套接字上停止传输,但套接字仍然留在系统中,并且与其关联的所有资源也会保留下来。在关闭套接字后,您仍然需要关闭套接字。
https://stackoverflow.com/questions/35441815
复制相似问题