mirror of
https://github.com/systemd/systemd.git
synced 2025-03-31 14:50:15 +03:00
resolved: lengthen timeout for TCP transactions
When we are doing a TCP transaction the kernel will automatically resend all packets for us, there's no need to do that ourselves. Hence: increase the timeout for TCP transactions substantially, to give the kernel enough time to connect to the peer, without interrupting it when we become impatient.
This commit is contained in:
parent
97277567b8
commit
dc349f5f7a
@ -31,6 +31,7 @@
|
||||
#include "string-table.h"
|
||||
|
||||
#define TRANSACTIONS_MAX 4096
|
||||
#define TRANSACTION_TCP_TIMEOUT_USEC (10U*USEC_PER_SEC)
|
||||
|
||||
static void dns_transaction_reset_answer(DnsTransaction *t) {
|
||||
assert(t);
|
||||
@ -1212,9 +1213,17 @@ static usec_t transaction_get_resend_timeout(DnsTransaction *t) {
|
||||
assert(t);
|
||||
assert(t->scope);
|
||||
|
||||
|
||||
switch (t->scope->protocol) {
|
||||
|
||||
case DNS_PROTOCOL_DNS:
|
||||
|
||||
/* When we do TCP, grant a much longer timeout, as in this case there's no need for us to quickly
|
||||
* resend, as the kernel does that anyway for us, and we really don't want to interrupt it in that
|
||||
* needlessly. */
|
||||
if (t->stream)
|
||||
return TRANSACTION_TCP_TIMEOUT_USEC;
|
||||
|
||||
assert(t->server);
|
||||
return t->server->resend_timeout;
|
||||
|
||||
@ -1579,7 +1588,7 @@ int dns_transaction_go(DnsTransaction *t) {
|
||||
r = dns_transaction_emit_udp(t);
|
||||
if (r == -EMSGSIZE)
|
||||
log_debug("Sending query via TCP since it is too large.");
|
||||
if (r == -EAGAIN)
|
||||
else if (r == -EAGAIN)
|
||||
log_debug("Sending query via TCP since server doesn't support UDP.");
|
||||
if (r == -EMSGSIZE || r == -EAGAIN)
|
||||
r = dns_transaction_open_tcp(t);
|
||||
|
Loading…
x
Reference in New Issue
Block a user