Error exits that happen early in the rsync run appear to cause an I/O error on the client. For example, passing an unknown option: $ rsync-dev -M--blop blort rsync: on remote machine: --blop: unknown option rsync error: syntax or usage error (code 1) at pipe.c(149) [Receiver=3.1.0dev] need to read 1024 bytes, iobuf.in.buf is only 0 bytes. rsync: connection unexpectedly closed (0 bytes received so far) [sender] rsync error: error in rsync protocol data stream (code 12) at io.c(223) [sender=3.1.0dev] This would seem to indicate that the new code to report an error exit gracefully in 3.1.0 is not working properly.
Rsync doesn't try to close down nicely early on in the setup (such as the case you cite) since the protocol hasn't even started. It might be nice to try to make this case better, but I'm not going to worry about it for 3.1.0.