Si estas seguro que te llegan espacios, prodrias usar strtok(), lo que hace esta funcion es dividir una cadena en componentes lexicos o tokens mediante un separador ( que en este caso seria " " ). Cuando terminen los datos que te interesan, termina la cadena con '\0' asi sabes hasta donde son datos utiles.
veamos un ejemplo completo:
recv(fd, buffer, 512, 0);/* No sizeof(buffer), especifica un tamaño (consejo) */
cadena = strtok(buffer, " ");
while (cadena != NULL ) {
/* Guardar esa cadena en un lugar o prosesarla */
cadena = strtok(NULL, " ");
}
Espero que te sea de ayuda, cualquier cosa, escribi nuevamente.
Saludos Mgitano2001