for($i=0; $i<=3; $i++)
^
Gemäß RFC1939 gibt es bei POP3 keine Message 0, die Zählung beginnt bei 1. RETR 0 liefert daher eine Fehlermeldung in der Art "-ERR Message 0 does not exist.". Diese einzeilige Fehlermeldung endet logischerweise nicht mit einer einzelnen Zeile ".\r\n" weswegen die while-Schleife nicht abbricht und zu einer Endlosschleife wird.
P.S.: Hie und da ein flush() täte dem debugging gut...