2013-05-20 58 views
4

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

+0

可能是这应该帮助[L1](http://stackoverflow.com/questions/3115561/calling-shutdown-and-closesocket-twice-on-same-socket)。 –

回答

1

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

注意的是,在s参数中传递的套接字描述符可以立即被系统一旦关闭套接字功能发出重用。因此,期望在s参数中传递的套接字描述符的进一步引用失败并返回错误WSAENOTSOCK是不可靠的。

我会解释,由于这意味着你应该注意不要关闭套接字两次当任何中间代码可能已经做任何涉及描述符 - 包括打开文件和其他插座 - 而不是一个必要的全面禁止,但真的这是脆弱的,你应该编码以避免这种可能性。将INVALID_SOCKET分配给您用来保存套接字描述符的变量可能是有意义的,允许您在再次调用closesocket之前检查它,或者(更糟糕的是)确保第二次调用的无副作用失败。

相关问题