Привет, я пытаюсь найти способ «отсоединить» сокет от определенной комбинации 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). Позвольте мне попробовать позвонить. Уничтожить напрямую и вернуться к вам.
РЕДАКТИРОВАТЬ (много правок, извинений): Реализация IDisposable и вызов a.Dispose (), из-за которого «a» теряет область видимости, не работает - моя реализация Dispose все равно должна вызывать либо .Close, либо .Disconnect (true) ( или .Shutdown (Оба)), но ни один из них не отвязывает сокет.
Буду признателен за любую помощь!