Here is why I did that though -- continue is just a goto by any other name. It leads to pollution of readable conditionals and loops just as the way a real goto causes an avoidance of conditionals and loops.
The end result of using continue in long blocks of nested code is code that cannot be easily skimmed or traced .. a lesson learned by reading many many thousands of lines of bad C code. Especially when the level of nesting exceeds one, continue becomes a jump. Continue with block labels is even worse -- it's a PURE goto, only more politically correct. Someone will say "I can handle the power!", but I say "think of the children!".
Also, your loop (by looking at indentation) implies that the perror() is in the main path of code execution, because it is masked by the indentation of the if -- which leads me to think "why is he executing exit periodically in a loop". My example avoids that by making the perror the exception rather than the rule. Subtle, but there was a method to my madness there. And of course, I am mad. There is no doubt about that.