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
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):