4

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

4

1 回答 1

1

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

请注意,一旦发出 closesocket 函数,在 s 参数中传递的套接字描述符可能会立即被系统重用。因此,期望对在 s 参数中传递的套接字描述符的进一步引用失败并出现错误 WSAENOTSOCK 是不可靠的。

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

于 2013-05-20T05:35:30.730 回答