From 7cc51690a21f2b9afc3227f9a3a7f590d715ef33 Mon Sep 17 00:00:00 2001 From: Andreas Horn Date: Fri, 28 Aug 2020 23:46:47 +0200 Subject: [PATCH 1/2] Allow faster reuse of socket, to be able to restart WifiServer. Fixes #3960 --- libraries/WiFi/src/WiFiServer.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/WiFi/src/WiFiServer.cpp b/libraries/WiFi/src/WiFiServer.cpp index 75c2872bb78..ced5bd5d270 100644 --- a/libraries/WiFi/src/WiFiServer.cpp +++ b/libraries/WiFi/src/WiFiServer.cpp @@ -72,6 +72,8 @@ void WiFiServer::begin(uint16_t port){ sockfd = socket(AF_INET , SOCK_STREAM, 0); if (sockfd < 0) return; + int enable = 1; + setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int)); server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons(_port); From 7a2ee92d9f0fb29320323e42820f331774bc67e5 Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Fri, 6 Nov 2020 14:09:53 +0200 Subject: [PATCH 2/2] Make socket reuse optional --- libraries/WiFi/src/WiFiServer.cpp | 5 ++++- libraries/WiFi/src/WiFiServer.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/libraries/WiFi/src/WiFiServer.cpp b/libraries/WiFi/src/WiFiServer.cpp index ced5bd5d270..d6a5ae822ca 100644 --- a/libraries/WiFi/src/WiFiServer.cpp +++ b/libraries/WiFi/src/WiFiServer.cpp @@ -63,6 +63,10 @@ WiFiClient WiFiServer::available(){ } void WiFiServer::begin(uint16_t port){ + begin(port, 1); +} + +void WiFiServer::begin(uint16_t port, int enable){ if(_listening) return; if(port){ @@ -72,7 +76,6 @@ void WiFiServer::begin(uint16_t port){ sockfd = socket(AF_INET , SOCK_STREAM, 0); if (sockfd < 0) return; - int enable = 1; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &enable, sizeof(int)); server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; diff --git a/libraries/WiFi/src/WiFiServer.h b/libraries/WiFi/src/WiFiServer.h index 34952cc694b..aeb831db1ba 100644 --- a/libraries/WiFi/src/WiFiServer.h +++ b/libraries/WiFi/src/WiFiServer.h @@ -40,6 +40,7 @@ class WiFiServer : public Server { WiFiClient available(); WiFiClient accept(){return available();} void begin(uint16_t port=0); + void begin(uint16_t port, int reuse_enable); void setNoDelay(bool nodelay); bool getNoDelay(); bool hasClient();