kvs,
В деструкторе ~WiFiClient() сокет не закрывается, удивительно что в вашем коде закоментарен client.stop(), если со стороны сервера соединение не закрывать, вы рискуете на клиенте исчерпать все сокеты.
В примере WiFiClientBasic.ino если соединение установлено то в конце обработки вызывается client.stop(),
но в другом примере WiFiClient.ino забывают вызывать client.stop() для случая кода ответ принят (видимо считают что сервер всегда закрывает соединение) и не забывают если в течении таймаута ответ от сервера не приходит. Там же код ожидания ответа от сервера без каких либо delay-ев после отправки запроса, просто сначала в течении 5-ти секунд ожидают начало ответа
Код:
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}