From 89351e3ade9a62edd891e363de08c124395dc0ad Mon Sep 17 00:00:00 2001 From: Guil-T Date: Mon, 20 Jan 2020 09:08:17 -0500 Subject: [PATCH] Update WiFiClient.cpp (#3608) fixed the connected() function so that it only checks errno if recv returns a value of -1. "in the even of an error, errno is set to indicate the error" --manpage This fixes the ESP32 Webserver when dealing with a modern webserver with a slow SD card. --- libraries/WiFi/src/WiFiClient.cpp | 39 +++++++++++++++++-------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/libraries/WiFi/src/WiFiClient.cpp b/libraries/WiFi/src/WiFiClient.cpp index 616b5de9..a92dadb2 100644 --- a/libraries/WiFi/src/WiFiClient.cpp +++ b/libraries/WiFi/src/WiFiClient.cpp @@ -495,23 +495,28 @@ uint8_t WiFiClient::connected() int res = recv(fd(), &dummy, 0, MSG_DONTWAIT); // avoid unused var warning by gcc (void)res; - switch (errno) { - case EWOULDBLOCK: - case ENOENT: //caused by vfs - _connected = true; - break; - case ENOTCONN: - case EPIPE: - case ECONNRESET: - case ECONNREFUSED: - case ECONNABORTED: - _connected = false; - log_d("Disconnected: RES: %d, ERR: %d", res, errno); - break; - default: - log_i("Unexpected: RES: %d, ERR: %d", res, errno); - _connected = true; - break; + // recv only sets errno if res is -1 + if (res < 0){ + switch (errno) { + case EWOULDBLOCK: + case ENOENT: //caused by vfs + _connected = true; + break; + case ENOTCONN: + case EPIPE: + case ECONNRESET: + case ECONNREFUSED: + case ECONNABORTED: + _connected = false; + log_d("Disconnected: RES: %d, ERR: %d", res, errno); + break; + default: + log_i("Unexpected: RES: %d, ERR: %d", res, errno); + _connected = true; + break; + } + } else { + _connected = true; } } return _connected;