From e204e7bd9b4f7d162f8a34581f443bc6254ce88a Mon Sep 17 00:00:00 2001 From: rtpmsys <106180646+rtpmsys@users.noreply.github.com> Date: Wed, 28 Sep 2022 19:16:19 +0200 Subject: [PATCH 1/4] Update WiFiClient.h Added missing getSocketOption() with full access to level and option --- libraries/WiFi/src/WiFiClient.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/WiFi/src/WiFiClient.h b/libraries/WiFi/src/WiFiClient.h index f36c51102e7..18b9b9c7a85 100644 --- a/libraries/WiFi/src/WiFiClient.h +++ b/libraries/WiFi/src/WiFiClient.h @@ -88,6 +88,7 @@ class WiFiClient : public ESPLwIPClient int setSocketOption(int option, char* value, size_t len); int setSocketOption(int level, int option, const void* value, size_t len); + int getSocketOption(int level, int option, const void* value, size_t size); int setOption(int option, int *value); int getOption(int option, int *value); int setTimeout(uint32_t seconds); From bcc50bf3f79246e190c49c7af6ec6e0a45259f39 Mon Sep 17 00:00:00 2001 From: rtpmsys <106180646+rtpmsys@users.noreply.github.com> Date: Thu, 29 Sep 2022 18:05:02 +0200 Subject: [PATCH 2/4] Update WiFiClient.h --- libraries/WiFi/src/WiFiClient.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/WiFi/src/WiFiClient.h b/libraries/WiFi/src/WiFiClient.h index f36c51102e7..18b9b9c7a85 100644 --- a/libraries/WiFi/src/WiFiClient.h +++ b/libraries/WiFi/src/WiFiClient.h @@ -88,6 +88,7 @@ class WiFiClient : public ESPLwIPClient int setSocketOption(int option, char* value, size_t len); int setSocketOption(int level, int option, const void* value, size_t len); + int getSocketOption(int level, int option, const void* value, size_t size); int setOption(int option, int *value); int getOption(int option, int *value); int setTimeout(uint32_t seconds); From ed4264324d7bfbcab662fc8bd6e48bdccac7fd67 Mon Sep 17 00:00:00 2001 From: rtpmsys <106180646+rtpmsys@users.noreply.github.com> Date: Sat, 15 Oct 2022 16:22:51 +0200 Subject: [PATCH 3/4] Handle timeout settings below 1 second Fix error with connect timeout settings below 1000ms. Add getsocketoptions function. --- libraries/WiFi/src/WiFiClient.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libraries/WiFi/src/WiFiClient.cpp b/libraries/WiFi/src/WiFiClient.cpp index 6e56e94ac53..8a81d825f55 100644 --- a/libraries/WiFi/src/WiFiClient.cpp +++ b/libraries/WiFi/src/WiFiClient.cpp @@ -231,7 +231,7 @@ int WiFiClient::connect(IPAddress ip, uint16_t port, int32_t timeout) FD_ZERO(&fdset); FD_SET(sockfd, &fdset); tv.tv_sec = _timeout / 1000; - tv.tv_usec = 0; + tv.tv_usec = (_timeout % 1000) * 1000; #ifdef ESP_IDF_VERSION_MAJOR int res = lwip_connect(sockfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr)); @@ -315,6 +315,16 @@ int WiFiClient::setSocketOption(int level, int option, const void* value, size_t return res; } +int WiFiClient::getSocketOption(int level, int option, const void* value, size_t size) +{ + int res = getsockopt(fd(), level, option, (char *)value, &size); + if(res < 0) { + log_e("fail on fd %d, errno: %d, \"%s\"", fd(), errno, strerror(errno)); + } + return res; +} + + int WiFiClient::setTimeout(uint32_t seconds) { Client::setTimeout(seconds * 1000); // This should be here? From af3a1806bd7930e20d6655a6eee6f9a6c12dba69 Mon Sep 17 00:00:00 2001 From: Me No Dev Date: Wed, 29 Nov 2023 09:08:01 +0200 Subject: [PATCH 4/4] Add cast for setsockopt length --- libraries/WiFi/src/WiFiClient.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/WiFi/src/WiFiClient.cpp b/libraries/WiFi/src/WiFiClient.cpp index 051edcb054d..91247d17386 100644 --- a/libraries/WiFi/src/WiFiClient.cpp +++ b/libraries/WiFi/src/WiFiClient.cpp @@ -324,7 +324,7 @@ int WiFiClient::setSocketOption(int level, int option, const void* value, size_t int WiFiClient::getSocketOption(int level, int option, const void* value, size_t size) { - int res = getsockopt(fd(), level, option, (char *)value, &size); + int res = getsockopt(fd(), level, option, (char *)value, (socklen_t*)&size); if(res < 0) { log_e("fail on fd %d, errno: %d, \"%s\"", fd(), errno, strerror(errno)); }