 
					
						
					
				
				
					@electrik said in Unblocking loop when DHCP fails:
MQTT_SOCKET_TIMEOUT
Thanks for your suggestion. Unfortunately it was not enough, but I manipulated in ethernet library and right now I have enough CPU time in my main loop (reading 16 buttons state and control 15 GPIO outputs).
Here is what I changed so far. I'm not sure about it long time stability, but it works on my desk:
diff --git a/.pio/libdeps/megaatmega2560/Ethernet/src/Ethernet.h b/.pio/libdeps/megaatmega2560/Ethernet/src/Ethernet.h
index 376e6c5..9d5e6b4 100644
--- a/.pio/libdeps/megaatmega2560/Ethernet/src/Ethernet.h
+++ b/.pio/libdeps/megaatmega2560/Ethernet/src/Ethernet.h
@@ -213,8 +213,8 @@ public:
 
 class EthernetClient : public Client {
 public:
-	EthernetClient() : sockindex(MAX_SOCK_NUM), _timeout(1000) { }
-	EthernetClient(uint8_t s) : sockindex(s), _timeout(1000) { }
+	EthernetClient() : sockindex(MAX_SOCK_NUM), _timeout(5) { }
+	EthernetClient(uint8_t s) : sockindex(s), _timeout(5) { }
 
 	uint8_t status();
 	virtual int connect(IPAddress ip, uint16_t port);
diff --git a/.pio/libdeps/megaatmega2560/MySensors/core/MyGatewayTransportMQTTClient.cpp b/.pio/libdeps/megaatmega2560/MySensors/core/MyGatewayTransportMQTTClient.cpp
index 12cfd67..754ae03 100644
--- a/.pio/libdeps/megaatmega2560/MySensors/core/MyGatewayTransportMQTTClient.cpp
+++ b/.pio/libdeps/megaatmega2560/MySensors/core/MyGatewayTransportMQTTClient.cpp
@@ -155,7 +155,7 @@ bool reconnectMQTT(void)
 
 		return true;
 	}
-	delay(1000);
+	delay(1);
 	GATEWAY_DEBUG(PSTR("!GWT:RMQ:FAIL\n"));
 	return false;
 }
@@ -190,7 +190,7 @@ bool gatewayTransportConnect(void)
 	              Ethernet.localIP()[0],
 	              Ethernet.localIP()[1], Ethernet.localIP()[2], Ethernet.localIP()[3]);
 	// give the Ethernet interface a second to initialize
-	delay(1000);
+	delay(10);
 #endif
 	return true;
 }