/* 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) {
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);