Close the socket.
This function is used to close the socket. Any asynchronous send, receive
or connect operations will be cancelled immediately, and will complete
Thrown on failure.
For portable behaviour with respect to graceful closure of a connected
shutdown() before closing the socket.