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/3] 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/3] 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/3] 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?