What is the proper way of closing and cleaning up

2019-02-04 13:11发布

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?

1条回答
祖国的老花朵
2楼-- · 2019-02-04 14:15

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);
}
查看更多
登录 后发表回答