问候,我正在尝试找到一种方法来从特定的 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 (两者))但没有一个解除套接字绑定。
任何帮助,将不胜感激!