@@ -80,14 +80,15 @@ struct DNS_QUERY {
80
80
uint8_t dns_server;
81
81
uint8_t retries;
82
82
uint8_t total_attempts;
83
+ uint8_t send_success;
83
84
uint8_t count;
84
85
dns_state state;
85
86
};
86
87
87
88
static void nsapi_dns_cache_add (const char *host, nsapi_addr_t *address, uint32_t ttl);
88
89
static nsapi_size_or_error_t nsapi_dns_cache_find (const char *host, nsapi_version_t version, nsapi_addr_t *address);
89
90
90
- static nsapi_error_t nsapi_dns_get_server_addr (NetworkStack *stack, uint8_t *index, uint8_t *total_attempts, SocketAddress *dns_addr);
91
+ static nsapi_error_t nsapi_dns_get_server_addr (NetworkStack *stack, uint8_t *index, uint8_t *total_attempts, uint8_t *send_success, SocketAddress *dns_addr);
91
92
92
93
static void nsapi_dns_query_async_create (void *ptr);
93
94
static nsapi_error_t nsapi_dns_query_async_delete (int unique_id);
@@ -384,7 +385,7 @@ static nsapi_error_t nsapi_dns_cache_find(const char *host, nsapi_version_t vers
384
385
return ret_val;
385
386
}
386
387
387
- static nsapi_error_t nsapi_dns_get_server_addr (NetworkStack *stack, uint8_t *index, uint8_t *total_attempts, SocketAddress *dns_addr)
388
+ static nsapi_error_t nsapi_dns_get_server_addr (NetworkStack *stack, uint8_t *index, uint8_t *total_attempts, uint8_t *send_success, SocketAddress *dns_addr)
388
389
{
389
390
bool dns_addr_set = false ;
390
391
@@ -393,8 +394,10 @@ static nsapi_error_t nsapi_dns_get_server_addr(NetworkStack *stack, uint8_t *ind
393
394
}
394
395
395
396
if (*index >= DNS_SERVERS_SIZE + DNS_STACK_SERVERS_NUM) {
396
- if (*total_attempts) {
397
+ // If there are total attempts left and send to has been successful at least once on this round
398
+ if (*total_attempts && *send_success) {
397
399
*index = 0 ;
400
+ *send_success = 0 ;
398
401
} else {
399
402
return NSAPI_ERROR_NO_ADDRESS;
400
403
}
@@ -453,11 +456,12 @@ static nsapi_size_or_error_t nsapi_dns_query_multiple(NetworkStack *stack, const
453
456
uint8_t retries = MBED_CONF_NSAPI_DNS_RETRIES;
454
457
uint8_t index = 0 ;
455
458
uint8_t total_attempts = MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS;
459
+ uint8_t send_success = 0 ;
456
460
457
461
// check against each dns server
458
462
while (true ) {
459
463
SocketAddress dns_addr;
460
- err = nsapi_dns_get_server_addr (stack, &index, &total_attempts, &dns_addr);
464
+ err = nsapi_dns_get_server_addr (stack, &index, &total_attempts, &send_success, & dns_addr);
461
465
if (err != NSAPI_ERROR_OK) {
462
466
break ;
463
467
}
@@ -474,6 +478,8 @@ static nsapi_size_or_error_t nsapi_dns_query_multiple(NetworkStack *stack, const
474
478
continue ;
475
479
}
476
480
481
+ send_success++;
482
+
477
483
if (total_attempts) {
478
484
total_attempts--;
479
485
}
@@ -650,6 +656,7 @@ nsapi_value_or_error_t nsapi_dns_query_multiple_async(NetworkStack *stack, const
650
656
query->dns_server = 0 ;
651
657
query->retries = MBED_CONF_NSAPI_DNS_RETRIES + 1 ;
652
658
query->total_attempts = MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS;
659
+ query->send_success = 0 ;
653
660
query->dns_message_id = 0 ;
654
661
query->socket_timeout = 0 ;
655
662
query->total_timeout = MBED_CONF_NSAPI_DNS_TOTAL_ATTEMPTS * MBED_CONF_NSAPI_DNS_RESPONSE_WAIT_TIME + 500 ;
@@ -971,7 +978,7 @@ static void nsapi_dns_query_async_send(void *ptr)
971
978
972
979
while (true ) {
973
980
SocketAddress dns_addr;
974
- nsapi_size_or_error_t err = nsapi_dns_get_server_addr (query->stack , &(query->dns_server ), &(query->total_attempts ), &dns_addr);
981
+ nsapi_size_or_error_t err = nsapi_dns_get_server_addr (query->stack , &(query->dns_server ), &(query->total_attempts ), &(query-> send_success ), & dns_addr);
975
982
if (err != NSAPI_ERROR_OK) {
976
983
nsapi_dns_query_async_resp (query, NSAPI_ERROR_TIMEOUT, NULL );
977
984
free (packet);
@@ -987,6 +994,8 @@ static void nsapi_dns_query_async_send(void *ptr)
987
994
}
988
995
}
989
996
997
+ query->send_success ++;
998
+
990
999
if (query->total_attempts ) {
991
1000
query->total_attempts --;
992
1001
}
0 commit comments