Fix creash issue, optimize timeout
This commit is contained in:
@@ -536,7 +536,7 @@ void _dns_client_period_run(void)
|
|||||||
pthread_mutex_lock(&client.domain_map_lock);
|
pthread_mutex_lock(&client.domain_map_lock);
|
||||||
list_for_each_entry_safe(query, tmp, &client.dns_request_list, dns_request_list)
|
list_for_each_entry_safe(query, tmp, &client.dns_request_list, dns_request_list)
|
||||||
{
|
{
|
||||||
if (now - query->send_tick >= 1000) {
|
if (now - query->send_tick >= 400 && query->send_tick > 0) {
|
||||||
list_add(&query->period_list, &check_list);
|
list_add(&query->period_list, &check_list);
|
||||||
_dns_client_query_get(query);
|
_dns_client_query_get(query);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,10 +51,10 @@
|
|||||||
#define DNS_MAX_EVENTS 256
|
#define DNS_MAX_EVENTS 256
|
||||||
#define DNS_SERVER_TMOUT_TTL (5 * 60)
|
#define DNS_SERVER_TMOUT_TTL (5 * 60)
|
||||||
#define DNS_CONN_BUFF_SIZE 4096
|
#define DNS_CONN_BUFF_SIZE 4096
|
||||||
#define DNS_REQUEST_MAX_TIMEOUT 1000
|
#define DNS_REQUEST_MAX_TIMEOUT 850
|
||||||
#define DNS_PING_TIMEOUT (DNS_REQUEST_MAX_TIMEOUT - 50)
|
#define DNS_PING_TIMEOUT (DNS_REQUEST_MAX_TIMEOUT)
|
||||||
#define DNS_TCPPING_START (300)
|
#define DNS_TCPPING_START (300)
|
||||||
#define DNS_PING_TCP_TIMEOUT (DNS_REQUEST_MAX_TIMEOUT - DNS_TCPPING_START - 50)
|
#define DNS_PING_TCP_TIMEOUT (DNS_REQUEST_MAX_TIMEOUT - DNS_TCPPING_START)
|
||||||
|
|
||||||
struct dns_conn_buf {
|
struct dns_conn_buf {
|
||||||
char buf[DNS_CONN_BUFF_SIZE];
|
char buf[DNS_CONN_BUFF_SIZE];
|
||||||
@@ -855,6 +855,8 @@ static int _dns_server_process_answer(struct dns_request *request, char *domain,
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
int j = 0;
|
int j = 0;
|
||||||
struct dns_rrs *rrs = NULL;
|
struct dns_rrs *rrs = NULL;
|
||||||
|
int ping_timeout = DNS_PING_TIMEOUT;
|
||||||
|
unsigned long now = get_tick_count();
|
||||||
|
|
||||||
if (packet->head.rcode != DNS_RC_NOERROR && packet->head.rcode != DNS_RC_NXDOMAIN) {
|
if (packet->head.rcode != DNS_RC_NOERROR && packet->head.rcode != DNS_RC_NXDOMAIN) {
|
||||||
if (request->rcode == DNS_RC_SERVFAIL) {
|
if (request->rcode == DNS_RC_SERVFAIL) {
|
||||||
@@ -865,6 +867,14 @@ static int _dns_server_process_answer(struct dns_request *request, char *domain,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ping_timeout = ping_timeout - (now - request->send_tick);
|
||||||
|
if (ping_timeout > DNS_PING_TIMEOUT) {
|
||||||
|
ping_timeout = DNS_PING_TIMEOUT;
|
||||||
|
} else if (ping_timeout < 10) {
|
||||||
|
ping_timeout = 10;
|
||||||
|
}
|
||||||
|
|
||||||
for (j = 1; j < DNS_RRS_END; j++) {
|
for (j = 1; j < DNS_RRS_END; j++) {
|
||||||
rrs = dns_get_rrs_start(packet, j, &rr_count);
|
rrs = dns_get_rrs_start(packet, j, &rr_count);
|
||||||
for (i = 0; i < rr_count && rrs; i++, rrs = dns_get_rrs_next(packet, rrs)) {
|
for (i = 0; i < rr_count && rrs; i++, rrs = dns_get_rrs_next(packet, rrs)) {
|
||||||
@@ -918,7 +928,7 @@ static int _dns_server_process_answer(struct dns_request *request, char *domain,
|
|||||||
request->rcode = packet->head.rcode;
|
request->rcode = packet->head.rcode;
|
||||||
sprintf(ip, "%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]);
|
sprintf(ip, "%d.%d.%d.%d", addr[0], addr[1], addr[2], addr[3]);
|
||||||
|
|
||||||
if (_dns_server_ping(request, PING_TYPE_ICMP, ip, DNS_PING_TIMEOUT) != 0) {
|
if (_dns_server_ping(request, PING_TYPE_ICMP, ip, ping_timeout) != 0) {
|
||||||
_dns_server_request_release(request);
|
_dns_server_request_release(request);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
@@ -964,7 +974,7 @@ static int _dns_server_process_answer(struct dns_request *request, char *domain,
|
|||||||
sprintf(ip, "%.2x%.2x:%.2x%.2x:%.2x%.2x:%.2x%.2x:%.2x%.2x:%.2x%.2x:%.2x%.2x:%.2x%.2x", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5],
|
sprintf(ip, "%.2x%.2x:%.2x%.2x:%.2x%.2x:%.2x%.2x:%.2x%.2x:%.2x%.2x:%.2x%.2x:%.2x%.2x", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5],
|
||||||
addr[6], addr[7], addr[8], addr[9], addr[10], addr[11], addr[12], addr[13], addr[14], addr[15]);
|
addr[6], addr[7], addr[8], addr[9], addr[10], addr[11], addr[12], addr[13], addr[14], addr[15]);
|
||||||
|
|
||||||
if (_dns_server_ping(request, PING_TYPE_ICMP, ip, DNS_PING_TIMEOUT) != 0) {
|
if (_dns_server_ping(request, PING_TYPE_ICMP, ip, ping_timeout) != 0) {
|
||||||
_dns_server_request_release(request);
|
_dns_server_request_release(request);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
|||||||
Reference in New Issue
Block a user