Effettuare il polling continuo di una pagina

Voglio fare in modo che il mio sketch acceda ogni tot secondi alla stessa pagina per controllare se è cambiata o no.
Ad accedere ogni 10 secondi ci riesco… ma solo la prima volta ricevo il contenuto della pagina, le volte successive non leggo niente.

Questa è la funzione chiamata continuamente dentro a loop():

void test() {
 String result = "";


 
 // We now create a URI for the request
 String url = "/test.html";
 Serial.print("Requesting URL: ");
 Serial.println(url);
 
 // This will send the request to the server
 client.print(String("GET ") + url + " HTTP/1.1\r\n" +
              "Host: " + host + "\r\n" + 
              "Connection: close\r\n\r\n");
 delay(500);
 
 // Read all the lines of the reply from server and print them to Serial
 while(client.available()){
   String line = client.readStringUntil('\r');
   result = result + line;
 }
 
 Serial.println(result);
 Serial.println("closing connection");
}

La prima risposta è:

Requesting URL: /test.html
HTTP/1.1 200 OK
Date: Sat, 05 Nov 2016 20:43:23 GMT
Server: Apache
X-Powered-By: PHP/5.2.17
Content-Length: 344
Connection: close
Content-Type: text/html

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
</head>
<body>
bla bla bla</body>
</html>

Poi più niente.
Cosa mi manca?
Pensavo dipendesse dalla cache ma non mi pare…

Dati insufficienti, oltre a un ciao e un grazie :roll_eyes: … leggo solo “VOGLIO”

ma solo la prima volta ricevo il contenuto della pagina, le volte successive non leggo niente.

Comunque è corretto, è vero la funzione EthernetClient, la lib w5100.h e la lib socket.h sono buggati da qualche parte.
La causa l’ho trovata, ma non ho ancora trovato la soluzione.

causa: dopo che il client ha stabilito la connessione ottieni la risposta la prima volta, poi il soket impegnato in quella connessione del w5100 non si chiude … bisogna attendere 60 sec prima di fare una nuova richiesta.

Ho tentato di scrivere tramite SPI sui registri del wiznet, inizializzazioni varie, delay vari … niente, per ora non sono riuscito a liberare i soket, riesco a resettare i registri, ma ancora nulla non riesco a forzare la chiusura.
Ci sto ancora lavorando.

Stesso problema che incontrai 4 anni fa nel fare un websoket, l’unico modo era isolare i soket del w5100 scegliendo da software quale usare allora rispondeva immediatamente, ma c’era un prezzo da pagare … nessuna connessione multipla e ovviamente rallentamento del sistema.
Al momento non è possibile inviare richieste a raffica con client.connect(“http link”, port) cosa che invece non succede con richieste UDP
Però se aspetti circa 60 sec tra una richiesta e l’altra al server il problema non sussiste.
Da quanto ho letto forse risolvi con la w5500 e la sua lib ethernet2