I agree that exposing the Socket is not what we want to do.
Making the IO consistent with any non-blocking I/O support is good. Better
yet would be to make it exactly the same API to avoid duplication.
Half closes are probably the biggest need, so those methods will help. But
you probably need isInputShutdown() and isOutputShutdown() methods as well.
However, my major concern is still that we give the container an opportunity
to provide it's own protocol implementation rather than the applications.
So something like the protocol provider discovery mechanism is a priority
for me.
regards