Bladeren bron

[Project] Rdns: Add timeout logic for TCP requests

tags/3.2
Vsevolod Stakhov 2 jaren geleden
bovenliggende
commit
3b0e294c48
2 gewijzigde bestanden met toevoegingen van 19 en 0 verwijderingen
  1. 13
    0
      contrib/librdns/resolver.c
  2. 6
    0
      contrib/librdns/util.c

+ 13
- 0
contrib/librdns/resolver.c Bestand weergeven

@@ -498,6 +498,9 @@ rdns_reschedule_req_over_tcp (struct rdns_request *req, struct rdns_server *serv
}
}

req->async_event = resolver->async->add_timer (resolver->async->data,
req->timeout, req);

kh_value(req->io->requests, k) = req;
REF_RETAIN(ioc);
REF_RELEASE(old_ioc);
@@ -618,6 +621,16 @@ rdns_process_timer (void *arg)
UPSTREAM_FAIL (req->io->srv, time (NULL));
}

if (req->state == RDNS_REQUEST_TCP) {
rep = rdns_make_reply (req, RDNS_RC_TIMEOUT);
rdns_request_unschedule (req);
req->state = RDNS_REQUEST_REPLIED;
req->func (rep, req->arg);
REF_RELEASE (req);

return;
}

if (req->retransmits == 0) {

rep = rdns_make_reply (req, RDNS_RC_TIMEOUT);

+ 6
- 0
contrib/librdns/util.c Bestand weergeven

@@ -643,6 +643,12 @@ rdns_request_unschedule (struct rdns_request *req)
req->async_event = NULL;
}
}
else if (req->state == RDNS_REQUEST_TCP) {
req->async->del_timer(req->async->data,
req->async_event);

req->async_event = NULL;
}
}

void

Laden…
Annuleren
Opslaan