如果试图关闭已经关闭的套接字winsock会发生什么?

时间:2013-05-20 04:46:27

标签: c++ c winsock

如果我两次调用closesocket(m_socket)会发生什么? 第一次调用后,套接字将关闭。 是否在第二次调用之后会发生对程序或应用程序不利的事情。或者它只会返回一个我可以忽略的错误。

1 个答案:

答案 0 :(得分:1)

请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms737582(v=vs.85).aspx

  

请注意,只要发出closesocket函数,系统就可以立即重新使用s参数中传递的套接字描述符。因此,期望对s参数中传递的套接字描述符的进一步引用失败并且错误WSAENOTSOCK是不可靠的。

我认为这意味着当任何中间代码可能做了涉及描述符的任何事情时(包括打开文件和其他套接字)而不是必要的全面禁止,你应该小心不要关闭套接字两次,但实际上这是是脆弱的,你应该编码,以避免这种可能性。将INVALID_SOCKET分配给您用来保存套接字描述符的变量可能是有意义的,允许您在再次调用closesocket之前检查它,或者(更糟)确保第二次调用的无副作用失败。