add Channel.read_exactly on socket backend