diff --git a/net/net.c b/net/net.c
index e5ab07c81d53dc81b8d92ea620ebbcfc689ee5d0..37b4aab34d455a7eb9cf3af97a1ead417c792d62 100644
--- a/net/net.c
+++ b/net/net.c
@@ -527,6 +527,8 @@ restart:
 			(*x)();
 		}
 
+		if (net_state == NETLOOP_FAIL)
+			NetStartAgain();
 
 		switch (net_state) {
 
@@ -602,8 +604,10 @@ void NetStartAgain(void)
 			retrycnt = 1;
 		else
 			retrycnt = simple_strtoul(nretry, NULL, 0);
-	} else
-		retry_forever = 1;
+	} else {
+		retrycnt = 0;
+		retry_forever = 0;
+	}
 
 	if ((!retry_forever) && (NetTryCount >= retrycnt)) {
 		eth_halt();