]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
lib/resolve: returned tcp-fallback
authorMarek Vavruša <marek.vavrusa@nic.cz>
Thu, 26 Nov 2015 17:45:06 +0000 (18:45 +0100)
committerMarek Vavruša <marek.vavrusa@nic.cz>
Thu, 26 Nov 2015 17:45:06 +0000 (18:45 +0100)
daemon/worker.c
lib/resolve.c

index 9e6510051f0356413c841b4cc35246e5fa7b1a9b..8c9a881cb34fdda08a7d539e9dc6a060983f3c02 100644 (file)
@@ -515,8 +515,9 @@ static int qr_task_step(struct qr_task *task, const struct sockaddr *packet_sour
 
        /* Start fast retransmit with UDP, otherwise connect. */
        if (sock_type == SOCK_DGRAM) {
-               if (retransmit(task))
+               if (retransmit(task)) {
                        uv_timer_start(&task->retry, on_retransmit, KR_CONN_RETRY, KR_CONN_RETRY);
+               }
        } else {
                struct ioreq *conn = ioreq_take(task->worker);
                if (!conn) {
index 55cbccca744b3751abedd3c987a60b049b64fd05..a50789f764398783ba8644d6c6a44dcc7330ed6e 100644 (file)
@@ -413,7 +413,10 @@ int kr_resolve_consume(struct kr_request *request, const struct sockaddr *src, k
        struct kr_query *qry = TAIL(rplan->pending);
        bool tried_tcp = (qry->flags & QUERY_TCP);
        if (!packet || packet->size == 0) {
-               request->state = KNOT_STATE_FAIL;
+               if (tried_tcp)
+                       request->state = KNOT_STATE_FAIL;
+               else
+                       qry->flags |= QUERY_TCP;
        } else {
                /* Packet cleared, derandomize QNAME. */
                knot_dname_t *qname_raw = (knot_dname_t *)knot_pkt_qname(packet);