4

closesocket(m_socket) を 2 回呼び出すとどうなりますか? 最初の呼び出しの後、ソケットは閉じられます。2 回目の呼び出しの後で、プログラムまたはアプリケーションにとって良くないことが起こるかどうか。または、無視できるエラーが返されるだけです。

4

1 に答える 1

1

http://msdn.microsoft.com/en-us/library/windows/desktop/ms737582(v=vs.85).aspxを参照してください。

s パラメータで渡されたソケット記述子は、closesocket 関数が発行されるとすぐに、システムによってすぐに再利用される可能性があることに注意してください。その結果、s パラメーターで渡されたソケット記述子への参照がエラー WSAENOTSOCK で失敗することを期待するのは信頼できません。

これは、必要な包括的な禁止ではなく、中間コードがファイルや他のソケットを開くことを含む記述子に関連する何かを行った可能性がある場合に、ソケットを2回閉じないように注意する必要があることを意味すると解釈しますが、実際にはこれは壊れやすく、可能性を避けるためにコーディングする必要があります。ソケット記述子を保持するために使用している変数に INVALID_SOCKET を割り当てることは理にかなっているかもしれません。これにより、closesocket を再度呼び出す前にそれをチェックできるようになり、(さらに悪いことに) 2 回目の呼び出しで副作用のない失敗を保証できます。

于 2013-05-20T05:35:30.730 に答える