diff --git a/libraries/ESP8266WiFi/src/WiFiClient.cpp b/libraries/ESP8266WiFi/src/WiFiClient.cpp index 07e4d99545..7a1c39e128 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClient.cpp @@ -308,7 +308,7 @@ bool WiFiClient::flush(unsigned int maxWaitMs) if (maxWaitMs == 0) maxWaitMs = WIFICLIENT_MAX_FLUSH_WAIT_MS; - return _client->wait_until_sent(maxWaitMs); + return _client->wait_until_acked(maxWaitMs); } bool WiFiClient::stop(unsigned int maxWaitMs) diff --git a/libraries/ESP8266WiFi/src/include/ClientContext.h b/libraries/ESP8266WiFi/src/include/ClientContext.h index e3c9e6c4b7..9eb81ec295 100644 --- a/libraries/ESP8266WiFi/src/include/ClientContext.h +++ b/libraries/ESP8266WiFi/src/include/ClientContext.h @@ -315,7 +315,7 @@ class ClientContext _rx_buf_offset = 0; } - bool wait_until_sent(int max_wait_ms = WIFICLIENT_MAX_FLUSH_WAIT_MS) + bool wait_until_acked(int max_wait_ms = WIFICLIENT_MAX_FLUSH_WAIT_MS) { // https://github.com/esp8266/Arduino/pull/3967#pullrequestreview-83451496 // option 1 done @@ -352,6 +352,8 @@ class ClientContext delay(0); // from sys or os context if ((state() != ESTABLISHED) || (sndbuf == TCP_SND_BUF)) { + // peer has closed or all bytes are sent and acked + // ((TCP_SND_BUF-sndbuf) is the amount of un-acked bytes) break; } } @@ -508,7 +510,7 @@ class ClientContext } while(true); if (_sync) - wait_until_sent(); + wait_until_acked(); return _written; } diff --git a/tests/host/common/include/ClientContext.h b/tests/host/common/include/ClientContext.h index 4eaee8acca..d6470a03b6 100644 --- a/tests/host/common/include/ClientContext.h +++ b/tests/host/common/include/ClientContext.h @@ -211,7 +211,7 @@ class ClientContext mockverbose("TODO: ClientContext::discard_received()\n"); } - bool wait_until_sent(int max_wait_ms = WIFICLIENT_MAX_FLUSH_WAIT_MS) + bool wait_until_acked(int max_wait_ms = WIFICLIENT_MAX_FLUSH_WAIT_MS) { (void)max_wait_ms; return true;