C#:我需要在销毁对象之前关闭我的套接字吗?

时间:2013-09-06 20:58:09

标签: c# sockets

我有一个类,其中套接字被定义为成员对象。 我是否需要.Close()套接字,如果我想销毁这个类的对象(设置为null)

2 个答案:

答案 0 :(得分:2)

简而言之,是的。

理想情况下,您的类将实现应关闭套接字的IDisposable。不这样做意味着套接字对象可以在内存中持久存在,直到垃圾收集器获取它为止。如果您计划重新连接到相同的端点,否则底层Windows库将抛出异常; (特别是错误10056:在已连接的套接字上发出了连接请求。)

答案 1 :(得分:1)

您好我认为您来自C ++中的C ++关闭方法调用后面的dispose方法。关闭后,您不必做任何事情。该对象将被处理,稍后将从GC设置为空。

但如果您的班级中有一个套接字作为成员,则必须应用Dispose模式!

Dispose pattern

只需将你的套接字置于你创建的类的dispose方法中,参见链接。

public class DisposableResourceHolder : IDisposable {

  private Socket socket; // handle to a resource

  public DisposableResourceHolder(){
      this.socket= ... // allocates the resource
  }

  public void Dispose(){
      Dispose(true);
      GC.SuppressFinalize(this);
    }

  protected virtual void Dispose(bool disposing){
      if (disposing){
          if (socket!= null) socket.Dispose(); // HERE DISPOSE
      }
  }
}

如果这样可以解决您的问题,请将此标记为答案!

由于