--- ./source/private_module/devm/src/net/entity/protocol/dns/eam_test_dns.c	2018-02-09 07:36:26.000000000 +0000
+++ ./source/private_module/devm/src/net/entity/protocol/dns/eam_test_dns.c.hotpatch	2019-10-14 09:55:23.000000000 +0000
@@ -35,9 +35,9 @@
 #include "eam_task_fdsa.h"
 
 MODULE_ID(OSP_DEV);
-
-
-
+#define EAM_DNS_MAX_RETRY_COUNT (3)
+#define EAM_DNS_MAX_RETRY_PERIOD (5*1000)
+uint8_t g_eamDnsRetryCount = 0;
 /*****************************************************************/
 /* ⶨʱID */
 int32_t  g_dnsCheckTimerId = -1;
@@ -610,14 +610,10 @@
 {
     int32_t retVal = RETURN_ERROR;  
     DNS_CHECK_TASK_S* testDnsTask = NULL;
- 
-    /* μ */
     CHECK_FIRM_PARA_IF_FALSE_DBG_AND_RETURN_VOID(NULL != rpcContext);
     CHECK_FIRM_PARA_IF_FALSE_DBG_AND_RETURN_VOID(NULL != context);
-
     testDnsTask = (DNS_CHECK_TASK_S*)context;  
     retVal = checkTestDnsResult(rpcContext);
-
     if (NULL != testDnsTask->cfgParam)
     {
         DBG_LogDebug(DBG_LOGID_NEW, "EAM_DNS: AUTO test DNS IP(%s) return 0x%x.", 
@@ -631,22 +627,26 @@
         TASK_CALL_ACTION_DONE_ASYNC_WITH_RESULT((TASK_S *)testDnsTask, RETURN_ERROR);
         return;
     }
-    
+    if ((RETURN_DNS_SERVER_UNAVAILABLE == retVal)&&(EAM_DNS_MAX_RETRY_COUNT > g_eamDnsRetryCount))
+    {
+		EAM_PRINT_LIMIT_PER_HOUR(EAM_PRINT_TIMES_PER_HOUR, DBG_LOG_INFO, DBG_LOGID_NEW, "EAM_DNS: DNS server unavailable retry %u.", g_eamDnsRetryCount); 
+        END_EAM_RPC_TASK(RETURN_OK, rpcContext);
+        TASK_DELAY_CALL_ACTION_START((TASK_S *)testDnsTask, (g_eamDnsRetryCount+1)*EAM_DNS_MAX_RETRY_PERIOD);
+        g_eamDnsRetryCount++;
+        return;
+    }
     if ((RETURN_OK == retVal) 
         ||(RETURN_DNS_SERVER_UNAVAILABLE == retVal))
     {
-        /* ݼ͸澯 */
         sendAutoTestDnsAlarm(testDnsTask, retVal);
-        END_EAM_RPC_TASK(RETURN_OK, rpcContext);
+		g_eamDnsRetryCount = 0;
+		END_EAM_RPC_TASK(RETURN_OK, rpcContext);
         TASK_CALL_ACTION_DONE_ASYNC_WITH_RESULT((TASK_S *)testDnsTask, RETURN_OK);
         return;
     }
-
-    /* RPC */
+	g_eamDnsRetryCount = 0;
     END_EAM_RPC_TASK(retVal, rpcContext);
-    /* ؼ */
     TASK_CALL_ACTION_DONE_ASYNC_WITH_RESULT((TASK_S *)testDnsTask, retVal);
-    
     return;
 }
 
