4
如果我兩次調用closesocket(m_socket)會發生什麼? 第一次調用之後,套接字將被關閉。 第二次調用後是否會發生對程序或應用程序不利的事情。或者它只會返回一個我可以忽略的錯誤。如果嘗試關閉已關閉的套接字winsock,會發生什麼情況?
如果我兩次調用closesocket(m_socket)會發生什麼? 第一次調用之後,套接字將被關閉。 第二次調用後是否會發生對程序或應用程序不利的事情。或者它只會返回一個我可以忽略的錯誤。如果嘗試關閉已關閉的套接字winsock,會發生什麼情況?
見http://msdn.microsoft.com/en-us/library/windows/desktop/ms737582(v=vs.85).aspx
注意的是,在s參數中傳遞的套接字描述符可以立即被系統一旦關閉套接字功能發出重用。因此,期望在s參數中傳遞的套接字描述符的進一步引用失敗並返回錯誤WSAENOTSOCK是不可靠的。
我會解釋,由於這意味着你應該注意不要關閉套接字兩次當任何中間代碼可能已經做任何涉及描述符 - 包括打開文件和其他插座 - 而不是一個必要的全面禁止,但真的這是脆弱的,你應該編碼以避免這種可能性。將INVALID_SOCKET分配給您用來保存套接字描述符的變量可能是有意義的,允許您在再次調用closesocket之前檢查它,或者(更糟糕的是)確保第二次調用的無副作用失敗。
可能是這應該幫助[L1](http://stackoverflow.com/questions/3115561/calling-shutdown-and-closesocket-twice-on-same-socket)。 –