你好,我正在尝试找到一种方法来从特定的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(Both)),但这些都不能取消绑定套接字。
任何帮助将不胜感激!