Broke when you found it, but this is really a "while(1)" forever loop. "more" is just begging future code to set it to 0 and leak fd.

Side note: It would be nice if std or boost defined a kind of "smart handle" class that you could initialize to an open fd and it closed the fd in its destructor.
That's a utility class that seems well worth using if it existed but only almost worth writing yourself if it didn't.