こんにちは、特定の IP/ポートの組み合わせからソケットを「バインド解除」する方法を見つけようとしています。私の疑似コードは次のようになります。
ClassA a = new ClassA(); //(class A instantiates socket and binds it to 127.0.0.1:4567)
//do something
//...much later, a has been garbage-collected away.
ClassA aa = new ClassA(); //crash here.
この時点で、.Net は、127.0.0.1:4567 にバインドされたソケットを既に取得していることを通知します。これは技術的には正しいです。しかし、ClassA のデストラクタにどんなコードを入れても、ソケットでどんな関数を呼び出しても (.Close() と .Disconnect(true) を試しました)、ソケットは誇らしげに 127.0.0.1:4567 にバインドされたままです。ソケットを「バインド解除」できるようにするにはどうすればよいですか?
編集:私はガベージコレクションだけに依存しているわけではありません(そのアプローチも試しましたが)。a.Close() または a.Disconnect() を呼び出してから、aa; をインスタンス化しようとしました。これは問題を解決しません。
編集: IDisposable の実装も試みましたが、メソッドを呼び出さずにコードを取得することはできませんでした (メソッドは単純に .Close と .Disconnect を試行するため、以前の試行と同等でした)。.Dispose に直接電話して、折り返しご連絡いたします。
編集 (多くの編集、謝罪): IDisposable を実装し、「a」がスコープを失う場所から a.Dispose() を呼び出すことは機能しません - 私の Dispose 実装は、まだ .Close または .Disconnect(true) (または .Shutdown のいずれかを呼び出す必要があります) (両方))しかし、ソケットのバインドを解除するものはありません。
どんな助けでも大歓迎です!