diff --git a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp index 6887ff594..da8b3b50a 100755 --- a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp +++ b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.cpp @@ -557,11 +557,17 @@ int WiFiClientSecure_light::_run_until(unsigned target, bool blocking) { DEBUG_BSSL("_run_until: Not connected\n"); return -1; } + uint32_t t = millis(); for (int no_work = 0; blocking || no_work < 2;) { if (blocking) { // Only for blocking operations can we afford to yield() optimistic_yield(100); } + + if (((int32_t)(millis() - (t + this->_loopTimeout)) >= 0)){ + DEBUG_BSSL("_run_until: Timeout\n"); + return -1; + } int state; state = br_ssl_engine_current_state(_eng); diff --git a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h index a93960086..3f0a892a5 100755 --- a/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h +++ b/lib/lib_ssl/tls_mini/src/WiFiClientSecureLightBearSSL.h @@ -131,6 +131,7 @@ class WiFiClientSecure_light : public WiFiClient { } private: + uint32_t _loopTimeout=5000; void _clear(); bool _ctx_present; std::shared_ptr _sc;