Examining the SocketImpl class, I found out that the SocketImpl::receiveBytes method does not report a graceful close from peer.
The Unix documentation of recv() says it returns 0 in such a case.
Is this a design decision? Is it intentionally left to the user to check for this case? Wouldn't it be better to check it in SocketImpl::receiveBytes and throw an exception?
By the way, congrats on this excellent library. I am still amazed.