From 0c4a3ec327917e51520f9173298ba723ce6b9cd0 Mon Sep 17 00:00:00 2001 From: Alexander Emelianov Date: Thu, 20 Jun 2019 13:30:45 +0500 Subject: [PATCH 1/3] TCP connect and send delay fix Implement early exit as connection established or data already sent. (Previous implementation was exiting only on timeout expired) --- libraries/ESP8266WiFi/src/include/ClientContext.h | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/libraries/ESP8266WiFi/src/include/ClientContext.h b/libraries/ESP8266WiFi/src/include/ClientContext.h index 2f2891510e..d529955561 100644 --- a/libraries/ESP8266WiFi/src/include/ClientContext.h +++ b/libraries/ESP8266WiFi/src/include/ClientContext.h @@ -130,8 +130,10 @@ class ClientContext } _connect_pending = 1; _op_start_time = millis(); - // This delay will be interrupted by esp_schedule in the connect callback - delay(_timeout_ms); + for (decltype(_timeout_ms) i = 0; _connect_pending && i < _timeout_ms; i++) { + // let a chance to recurrent scheduled functions (ethernet) + delay(1); + } _connect_pending = 0; if (!_pcb) { DEBUGV(":cabrt\r\n"); @@ -456,8 +458,10 @@ class ClientContext } _send_waiting = true; - // This delay will be interrupted by esp_schedule on next received ack - delay(_timeout_ms); + for (decltype(_timeout_ms) i = 0; _send_waiting && i < _timeout_ms; i++) { + // let a chance to recurrent scheduled functions (ethernet) + delay(1); + } } while(true); _send_waiting = false; @@ -603,6 +607,7 @@ class ClientContext (void) pcb; assert(pcb == _pcb); assert(_connect_pending); + _connect_pending = 0; esp_schedule(); return ERR_OK; } From efde1269bba3099532b838f167eaddb6b48cb5be Mon Sep 17 00:00:00 2001 From: Alexander Emelianov Date: Fri, 21 Jun 2019 12:00:43 +0500 Subject: [PATCH 2/3] Put back delay comments With just slight paraphrase --- libraries/ESP8266WiFi/src/include/ClientContext.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/ESP8266WiFi/src/include/ClientContext.h b/libraries/ESP8266WiFi/src/include/ClientContext.h index d529955561..a4eb170225 100644 --- a/libraries/ESP8266WiFi/src/include/ClientContext.h +++ b/libraries/ESP8266WiFi/src/include/ClientContext.h @@ -130,6 +130,7 @@ class ClientContext } _connect_pending = 1; _op_start_time = millis(); + // Following delay will be interrupted by connect callback for (decltype(_timeout_ms) i = 0; _connect_pending && i < _timeout_ms; i++) { // let a chance to recurrent scheduled functions (ethernet) delay(1); @@ -458,6 +459,7 @@ class ClientContext } _send_waiting = true; + // Following delay will be interrupted by on next received ack for (decltype(_timeout_ms) i = 0; _send_waiting && i < _timeout_ms; i++) { // let a chance to recurrent scheduled functions (ethernet) delay(1); From d7c11c9ed79270fbaea0e2a37a77b5c85e180bb4 Mon Sep 17 00:00:00 2001 From: Alexander Emelianov Date: Thu, 4 Jul 2019 11:55:44 +0500 Subject: [PATCH 3/3] Change comment lines --- libraries/ESP8266WiFi/src/include/ClientContext.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/ESP8266WiFi/src/include/ClientContext.h b/libraries/ESP8266WiFi/src/include/ClientContext.h index a4eb170225..2023d30b11 100644 --- a/libraries/ESP8266WiFi/src/include/ClientContext.h +++ b/libraries/ESP8266WiFi/src/include/ClientContext.h @@ -132,7 +132,7 @@ class ClientContext _op_start_time = millis(); // Following delay will be interrupted by connect callback for (decltype(_timeout_ms) i = 0; _connect_pending && i < _timeout_ms; i++) { - // let a chance to recurrent scheduled functions (ethernet) + // Give scheduled functions a chance to run (e.g. Ethernet uses recurrent) delay(1); } _connect_pending = 0; @@ -461,7 +461,7 @@ class ClientContext _send_waiting = true; // Following delay will be interrupted by on next received ack for (decltype(_timeout_ms) i = 0; _send_waiting && i < _timeout_ms; i++) { - // let a chance to recurrent scheduled functions (ethernet) + // Give scheduled functions a chance to run (e.g. Ethernet uses recurrent) delay(1); } } while(true);