Il consiglio è di studiarti un po' il protocollo HTTP.
HTTP 1.1 ftp://ftp.rfc-editor.org/in-notes/rfc2616.txt
HTTP 1.0 ftp://ftp.rfc-editor.org/in-notes/rfc1945.txt

in particolare il paragrafo 4.4 di http 1.1, versione del protocollo che oramai viene usato di default.

In ogni caso, se il tuo intento è semplicemente ricevere il contenuto di una pagina e non ti interessano feature avanzate di http 1.1 ti consiglio di forzare una richiesta HTTP 1.0. In questo modo eviti sia risposte chunked sia connessioni persistenti (queste ultime, default per http 1.1, sono quelle che ti disorientano).
Prova con:

GET / HTTP/1.0

al termine della risposta il server interromperà la connessione TCP e la tua RECV ritornerà il controllo al programma.

Con HTTP 1.1 ci sono altre alternative come usare

Connection: close

nella richiesta. In questo modo si forza il server a chiudere la connessione al termine della risposta. Il comportamento di default per http 1.1 infatti è di tipo persistent il che consente di fare più richieste sulla stessa connessione ma necessita di capire quando la risposta è finita.

Ancora un'altra possibilità con http 1.1... dopo la richiesta e prima di ricevere i dati fai una chiusura selettiva della socket in scrittura:
shutdown(socket,SD_SEND)
sicuramente meno elegante ma altrettanto efficace. Anche in questo caso il server chiuderà al connessione al termne della risposta.

Ricordati inoltre che se usi http 1.1 devi aspettarti la possibilità (molto probabile) di ricevere risposte chunked. Questo viene testimoniato dalla presenza di un
Transfer-Encoding: chunked
negli header di risposta e dalla presenza di caratteri spuri in mezzo e alla fine del messaggio.
Per info leggi i paragrafi 3.6.0 e 3.6.1 dell'rfc http 1.1

Insomma la soluzione più semplice è quella di usare http 1.0.