It's surprisingly hard to find a simple explanation on what these four methods actually do, aimed at network programming newbies. People usually just state what they believe is the proper way to close a socket in a particular scenario, but not what happens in the background behind each step.
Going by the teach-a-man-to-fish philosophy, can you explain the Shutdown, Disconnect, Close and Dispose methods?
The shutdown function shuts down the connection of socket. Its argument how specifies what action to perform: 0 Stop receiving data for this socket. If further data arrives, reject it.
An answer on StackOverflow made me think I have finally reached some glimpse of an understanding. Then I went testing for a bit and here's the summary of a newbie's view. Please correct me if I'm wrong because this is based on inference, not expertise.
Shutdown disables the Send and/or Receive methods, depending on the provided argument. It doesn't disable the underlying protocol handling and it never blocks.
If Send is disabled, it also queues up a zero-byte send packet into the underlying send buffer. When the other side receives this packet, it knows that your socket will no longer send any data.
If Receive is disabled, any data the other side might be trying to send will be lost.
If Receive is disabled without disabling Send, it just prevents the socket from receiving data. Since no zero-byte packet will be sent, the other side won't know anything about it until it tries to send something, and only if the socket's protocol requires acknowledging.
First, Disconnect does the equivalent of Shutdown(SocketShutdown.Both).
Then it blocks, waiting for two things:
If you call Disconnect(false), system resources will be freed.
Close frees system resources. May abruptly stop sending queued-up data. If called with the argument, will wait for the data to be sent, but only up to the specified timeout.
Dispose is same as the Close overload without the timeout argument. To be more precise, Close without timeout is the same as Dispose.
If you use the using block on the socket, it will automatically call Dispose.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With