mirror of
https://github.com/nmap/nmap.git
synced 2025-12-09 06:01:28 +00:00
mass_dns: keep capacity higher in the case of timeouts
This commit is contained in:
12
nmap_dns.cc
12
nmap_dns.cc
@@ -179,8 +179,8 @@ static int read_timeouts[][MAX_DNS_TRIES + 1] = {
|
|||||||
#define CAPACITY_MIN 10
|
#define CAPACITY_MIN 10
|
||||||
#define CAPACITY_MAX 100
|
#define CAPACITY_MAX 100
|
||||||
#define CAPACITY_UP_STEP 2
|
#define CAPACITY_UP_STEP 2
|
||||||
#define CAPACITY_MINOR_DOWN_SCALE 0.5
|
#define CAPACITY_MINOR_DOWN_SCALE 0.7
|
||||||
#define CAPACITY_MAJOR_DOWN_SCALE 0.2
|
#define CAPACITY_MAJOR_DOWN_SCALE 0.4
|
||||||
|
|
||||||
// Each request will try to resolve on at most this many servers:
|
// Each request will try to resolve on at most this many servers:
|
||||||
#define SERVERS_TO_TRY 3
|
#define SERVERS_TO_TRY 3
|
||||||
@@ -574,7 +574,7 @@ static int deal_with_timedout_reads(bool adjust_timing) {
|
|||||||
// If we've tried this server enough times, move to the next one
|
// If we've tried this server enough times, move to the next one
|
||||||
if (read_timeouts[read_timeout_index][tpreq->tries] == -1) {
|
if (read_timeouts[read_timeout_index][tpreq->tries] == -1) {
|
||||||
if (!adjusted) {
|
if (!adjusted) {
|
||||||
servI->max_capacity = servI->capacity * 1.5;
|
servI->max_capacity = servI->capacity * 2;
|
||||||
servI->capacity = (int) (servI->capacity * CAPACITY_MAJOR_DOWN_SCALE);
|
servI->capacity = (int) (servI->capacity * CAPACITY_MAJOR_DOWN_SCALE);
|
||||||
check_capacities(&*servI);
|
check_capacities(&*servI);
|
||||||
adjusted = true;
|
adjusted = true;
|
||||||
@@ -612,7 +612,7 @@ static int deal_with_timedout_reads(bool adjust_timing) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!adjusted) {
|
if (!adjusted) {
|
||||||
servI->max_capacity = servI->capacity * 2;
|
servI->max_capacity = servI->capacity * 4;
|
||||||
servI->capacity = (int) (servI->capacity * CAPACITY_MINOR_DOWN_SCALE);
|
servI->capacity = (int) (servI->capacity * CAPACITY_MINOR_DOWN_SCALE);
|
||||||
check_capacities(&*servI);
|
check_capacities(&*servI);
|
||||||
adjusted = true;
|
adjusted = true;
|
||||||
@@ -624,7 +624,7 @@ static int deal_with_timedout_reads(bool adjust_timing) {
|
|||||||
|
|
||||||
} while (nextI != servI->in_process.end());
|
} while (nextI != servI->in_process.end());
|
||||||
|
|
||||||
if (may_increase && TIMEVAL_MSEC_SUBTRACT(earliest_sent, servI->last_increase) > (2 * MIN_DNS_TIMEOUT) && servI->reqs_on_wire > servI->capacity - CAPACITY_UP_STEP) {
|
if (may_increase && TIMEVAL_MSEC_SUBTRACT(earliest_sent, servI->last_increase) > (MIN_DNS_TIMEOUT) && servI->reqs_on_wire > servI->capacity - 2*CAPACITY_UP_STEP) {
|
||||||
servI->capacity += CAPACITY_UP_STEP;
|
servI->capacity += CAPACITY_UP_STEP;
|
||||||
check_capacities(&*servI);
|
check_capacities(&*servI);
|
||||||
servI->last_increase = now;
|
servI->last_increase = now;
|
||||||
@@ -643,7 +643,7 @@ static void process_request(int action, info &reqinfo) {
|
|||||||
switch (action) {
|
switch (action) {
|
||||||
case ACTION_SYSTEM_RESOLVE:
|
case ACTION_SYSTEM_RESOLVE:
|
||||||
case ACTION_FINISHED:
|
case ACTION_FINISHED:
|
||||||
if (server->reqs_on_wire == server->capacity && server->capacity * 2 < server->max_capacity) {
|
if (server->reqs_on_wire == server->capacity && server->capacity < 2 * CAPACITY_MIN) {
|
||||||
server->capacity++;
|
server->capacity++;
|
||||||
check_capacities(server);
|
check_capacities(server);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user