如何正确优雅的关闭socket连接
在解决socket关闭重连的问题上,发现总是关闭不彻底,即使关闭后,也会出现异常:System.ObjectDisposedException: Cannot access a disposed object.
Object name: ‘System.Net.Sockets.Socket’.
大概意思是不能得到一个关闭的对象,这里我明白了,即使关闭了socket和释放资源,后台还是有接受或发送的操作存在,所以有了下面的更改。
开始关闭是这么写的
socket.Close();
socket.Dispose();
后来发现,c#关闭socket时,单独使用socket.close()通常会造成资源提前被释放,应该在关闭socket之前,先使用shutdown进行接受或者发送的禁用,再使用socket进行释放。
修改代码:
socket.Shutdown(SocketShutdown.Both);
socket.Close();
socket.Dispose();
可用数字0、1、2代替
SocketShutdown.Receive = 0;
SocketShutdown.Send = 1;
SocketShutdown.Both = 2;