If enabled, no OPT record (EDNS) is inserted to outgoing requests to this
remote server. This mode is necessary for communication with some broken
-implementations (e.g. Windows Server 2016).
+DNS implementations (e.g. Windows Server 2016).
+
+Additionally, if TCP is used for zone refresh, the SOA query and the subsequent
+AXFR/IXFR query do not share the same TCP connection. This mode allows
+transfers from some broken DNS implementations (e.g. ixfrdist).
.. NOTE::
This option effectively disables :ref:`zone expire<Zone expiration>` timer
}
knot_request_flag_t flags = conf->cache.srv_tcp_fastopen ? KNOT_REQUEST_TFO : 0;
+ if (data.edns.no_edns) {
+ flags |= KNOT_REQUEST_NEW;
+ }
knot_request_t *req = knot_request_make(NULL, master, pkt, zone->server->quic_creds,
&data.edns, flags);
if (req == NULL) {
}
if (req->layer.state == KNOT_STATE_CONSUME) {
+ if ((last->flags & KNOT_REQUEST_NEW) &&
+ !(last->flags & (KNOT_REQUEST_UDP | KNOT_REQUEST_TLS))) {
+ close(last->fd);
+ last->fd = -1;
+ }
bool reused_fd = false;
ret = request_send(last, timeout_ms, &reused_fd);
if (ret != KNOT_EOK) {
KNOT_REQUEST_QUIC = 1 << 3, /*!< Use QUIC/UDP for requests. */
KNOT_REQUEST_TLS = 1 << 4, /*!< Use DoT for requests. */
KNOT_REQUEST_FWD = 1 << 5, /*!< Forwarded message, don't modify (TSIG, PADDING). */
+ KNOT_REQUEST_NEW = 1 << 6, /*!< Ensure a new TCP connection is established. */
} knot_request_flag_t;
typedef enum {