diff --git a/src/TinyGsmClientBG96.h b/src/TinyGsmClientBG96.h index 73a38ac..1b52126 100644 --- a/src/TinyGsmClientBG96.h +++ b/src/TinyGsmClientBG96.h @@ -89,10 +89,20 @@ public: virtual void stop() { TINY_GSM_YIELD(); + // Read and dump anything remaining in the modem's internal buffer. + // The socket will appear open in response to connected() even after it + // closes until all data is read from the buffer. + // Doing it this way allows the external mcu to find and get all of the data + // that it wants from the socket even if it was closed externally. + at->maintain(); + while (sock_available > 0) { + sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux); + rx.clear(); + at->maintain(); + } at->sendAT(GF("+QICLOSE="), mux); sock_connected = false; at->waitResponse(); - rx.clear(); } virtual size_t write(const uint8_t *buf, size_t size) { diff --git a/src/TinyGsmClientM95.h b/src/TinyGsmClientM95.h index 1e15983..e2ec160 100644 --- a/src/TinyGsmClientM95.h +++ b/src/TinyGsmClientM95.h @@ -89,10 +89,20 @@ public: virtual void stop() { TINY_GSM_YIELD(); + // Read and dump anything remaining in the modem's internal buffer. + // The socket will appear open in response to connected() even after it + // closes until all data is read from the buffer. + // Doing it this way allows the external mcu to find and get all of the data + // that it wants from the socket even if it was closed externally. + at->maintain(); + while (sock_available > 0) { + sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux); + rx.clear(); + at->maintain(); + } at->sendAT(GF("+QICLOSE="), mux); sock_connected = false; at->waitResponse(60000L, GF("CLOSED"), GF("CLOSE OK"), GF("ERROR")); - rx.clear(); } virtual size_t write(const uint8_t *buf, size_t size) { diff --git a/src/TinyGsmClientMC60.h b/src/TinyGsmClientMC60.h index 06717b9..495781c 100644 --- a/src/TinyGsmClientMC60.h +++ b/src/TinyGsmClientMC60.h @@ -93,10 +93,20 @@ public: virtual void stop() { TINY_GSM_YIELD(); + // Read and dump anything remaining in the modem's internal buffer. + // The socket will appear open in response to connected() even after it + // closes until all data is read from the buffer. + // Doing it this way allows the external mcu to find and get all of the data + // that it wants from the socket even if it was closed externally. + at->maintain(); + while (sock_available > 0) { + sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux); + rx.clear(); + at->maintain(); + } at->sendAT(GF("+QICLOSE="), mux); sock_connected = false; at->waitResponse(60000L, GF("CLOSED"), GF("CLOSE OK"), GF("ERROR")); - rx.clear(); } virtual size_t write(const uint8_t *buf, size_t size) { diff --git a/src/TinyGsmClientSIM800.h b/src/TinyGsmClientSIM800.h index 5afcc4b..817b531 100644 --- a/src/TinyGsmClientSIM800.h +++ b/src/TinyGsmClientSIM800.h @@ -95,10 +95,20 @@ public: virtual void stop() { TINY_GSM_YIELD(); + // Read and dump anything remaining in the modem's internal buffer. + // The socket will appear open in response to connected() even after it + // closes until all data is read from the buffer. + // Doing it this way allows the external mcu to find and get all of the data + // that it wants from the socket even if it was closed externally. + at->maintain(); + while (sock_available > 0) { + sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux); + rx.clear(); + at->maintain(); + } at->sendAT(GF("+CIPCLOSE="), mux); sock_connected = false; at->waitResponse(); - rx.clear(); } virtual size_t write(const uint8_t *buf, size_t size) { diff --git a/src/TinyGsmClientUBLOX.h b/src/TinyGsmClientUBLOX.h index 442b44d..fd7ff06 100644 --- a/src/TinyGsmClientUBLOX.h +++ b/src/TinyGsmClientUBLOX.h @@ -86,9 +86,11 @@ public: } virtual void stop() { - // Read and dump anything remaining in the u-blox buffer + // Read and dump anything remaining in the modem's internal buffer. // The socket will appear open in response to connected() even after it // closes until all data is read from the buffer. + // Doing it this way allows the external mcu to find and get all of the data + // that it wants from the socket even if it was closed externally. at->maintain(); while (sock_available > 0) { sock_available -= at->modemRead(TinyGsmMin((uint16_t)rx.free(), sock_available), mux);