Prevents deep recursion in the event of connection failure

The code isn't as readable as I like, but this is the only way I can seem to eliminate deep recursion if there is a connection failure.  This eliminates the extra call stack layer when we need to reconnect using `goto &func` but this requires setting up @_ manually above.
I always avoid to use goto if possible. that looks weird for me.