I've given this a try; it applies cleanly and runs. Nice! A few more/new observations. When I run this against my initial test I've noticed that:
- the client Transceiver now hangs on close() and the VM does not exit properly any longer
- because the Transceiver's threads hang around
- because the Transceiver's factory.releaseExternalResources() is never called
- because close() calls disconnect(true, true) which waits for channel shutdown forever or hiccups, throwing more exceptions.
There also seems to be an awful lot of exception logging in various places (in -ipc in general). This makes things a lot harder to read or track and very confusing - propagate, handle or log but not all three at once
As far as the propagated exception goes, wrapping the IOException into an AvroException with cause is fine and consistent with the SaslSocketServer. We just need some consistent way to figure out that something went kaput.