ho già risolto, grazie lo stesso

in poche parole credo che appena il client socket viene chiuso la recv riesce a notarlo e dovrebbe restituire 0; di conseguenza esce dal ciclo e viene chiamata la close().