If you do a ConnectAsync on an already connected socket, no exception is thrown. Synchronous Connect correctly throws a SocketException with errorcode SocketError.IsConnected.