El recibir cero bytes de un socket no necesariamente es un error. Los socket UDP puede manejar datagramas de cero bytes al igual que los socket TCP no bloqueantes pueden devolver 0 en el recv. No deberia lanzar una excepcion.