From: Marek VavruĊĦa Date: Fri, 17 Jul 2015 14:57:20 +0000 (+0200) Subject: lib/resolve: fixed TCP retransmit X-Git-Tag: v1.0.0-beta1~72^2~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=51b977b4d338131ad0e63378ebfe12e3148c73e4;p=thirdparty%2Fknot-resolver.git lib/resolve: fixed TCP retransmit --- diff --git a/lib/resolve.c b/lib/resolve.c index c81afd9f1..bc51b1784 100644 --- a/lib/resolve.c +++ b/lib/resolve.c @@ -400,10 +400,9 @@ int kr_resolve_consume(struct kr_request *request, knot_pkt_t *packet) if (!packet || packet->size == 0) { /* Network error, retry over TCP. */ if (!(qry->flags & QUERY_TCP)) { - /** @todo This should just penalize UDP and elect next best. */ DEBUG_MSG("=> NS unreachable, retrying over TCP\n"); qry->flags |= QUERY_TCP; - return KNOT_STATE_CONSUME; /* Try again */ + return KNOT_STATE_PRODUCE; } } else { /* Packet cleared, derandomize QNAME. */ @@ -501,7 +500,7 @@ ns_election: assert(++ns_election_iter < KR_ITER_LIMIT); if (qry->flags & (QUERY_AWAIT_IPV4|QUERY_AWAIT_IPV6)) { kr_nsrep_elect_addr(qry, request->ctx); - } else { + } else if (!(qry->flags & QUERY_TCP)) { /* Keep address when TCP retransmit. */ kr_nsrep_elect(qry, request->ctx); if (qry->ns.score > KR_NS_MAX_SCORE) { DEBUG_MSG("=> no valid NS left\n");