Search code examples
c#socketsdispose

Should I manually dispose the socket after closing it?


Should I still call Dispose() on my socket after closing it?

For example:

mySocket.Shutdown(SocketShutdown.Both);
mySocket.Close();
mySocket.Dispose(); // Redundant?

I was wondering because the MSDN documentation says the following:

Closes the Socket connection and releases all associated resources.


Solution

  • Calling Close internally calls Dispose so you don't need to call both. From .NET Reflector:

    public void Close()
    {
        if (s_LoggingEnabled)
        {
            Logging.Enter(Logging.Sockets, this, "Close", (string) null);
        }
        ((IDisposable)this).Dispose();
        if (s_LoggingEnabled)
        {
            Logging.Exit(Logging.Sockets, this, "Close", (string) null);
        }
    }
    

    If possible you should use the using pattern so that you always call Dispose regardless of any exceptions that might occur.