diff --git a/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp index 7ae53e6b91..b71a5fa7bf 100644 --- a/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp @@ -248,6 +248,7 @@ void WiFiClientSecure::_freeSSL() { _recvapp_len = 0; // This connection is toast _handshake_done = false; + _timeout = 15000; } bool WiFiClientSecure::_clientConnected() { @@ -1009,6 +1010,9 @@ bool WiFiClientSecure::_connectSSL(const char* hostName) { _x509_insecure = nullptr; _x509_knownkey = nullptr; + // reduce timeout after successful handshake to fail fast if server stop accepting our data for whathever reason + if (ret) _timeout = 5000; + return ret; } diff --git a/libraries/ESP8266WiFi/src/include/ClientContext.h b/libraries/ESP8266WiFi/src/include/ClientContext.h index 0126621a67..2f2891510e 100644 --- a/libraries/ESP8266WiFi/src/include/ClientContext.h +++ b/libraries/ESP8266WiFi/src/include/ClientContext.h @@ -456,7 +456,8 @@ class ClientContext } _send_waiting = true; - esp_yield(); + // This delay will be interrupted by esp_schedule on next received ack + delay(_timeout_ms); } while(true); _send_waiting = false;