【发布时间】:2012-10-04 16:35:46
【问题描述】:
我有一个 SocketState 对象,用于将缓冲区和套接字包装在一起,并将其传递给 Begin/End 异步套接字方法。在析构函数中,我有这个:
~SocketState()
{
if (!_socket.Connected) return;
_socket.Shutdown(SocketShutdown.Both);
_socket.Close();
}
当它到达 Close() 时,我得到一个 ObjectDisposed 异常。如果我注释掉调用 Shutdown(),当它到达 Close() 方法时,我不会收到错误消息。我做错了什么?
编辑:
我知道 IDisposable 解决方案似乎是我的代码应该布局的方式,但这实际上并不能解决我的问题。它不像析构函数被调用两次,那么为什么调用 dispose() 而不是使用析构函数对我有帮助呢?连续调用这两个函数时,我仍然遇到同样的异常。
我查看了类似服务器的源代码,他们所做的只是将这两个语句包装在一个 try 块中并吞下异常。如果必须,我会这样做,因为它看起来无害(无论如何我们都会关闭它),但如果可能的话,我想避免它。
【问题讨论】:
标签: c# networking sockets