Socket学习心得(一)

如何正确优雅的关闭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;

你可能感兴趣的:(C#)