La guida per la recv indica

"If the connection has been gracefully closed, the return value is zero."

Quindi, se r e' 0, devi controllarlo ed uscire dal ciclo perche' la connessione e' stata chiusa.