What is the proper way of closing and cleaning up a Socket connection?
原链接:
问题:
I am a bit confused by the cornucopia of related methods on the Socket object that supposedly close and clean up a socket connection. Consider the following:
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect("192.168.1.22", 8333);
socket.Send(Encoding.UTF8.GetBytes("hello"));
// now for the closing fun
socket.Shutdown(SocketShutdown.Both);
socket.Disconnect(false);
socket.Close();
socket.Dispose();
In addition, this guy says that to really cleanly close a connection, one must execute socket.Shutdown(SocketShudown.Send)
, then wait for the other side to respond.
What is the correct way to close, then clean up a socket connection?
高赞答案:
Closing socket closes the connection, and Close is a wrapper-method around Dispose, so generally
socket.Shutdown(SocketShutdown.Both);
socket.Close();
should be enough. Some might argue, that Close implementation might change one day (so it no longer calls Dispose), and you should call Dispose manually after calling Close, but i doubt thats gonna happen, personally :)
Alternatively, consider using using (yeh):
using (var socket = new Socket(...))
{
....
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}