From: W.C.A. Wijngaards Date: Wed, 1 Sep 2021 14:21:10 +0000 (+0200) Subject: - Fix tcp fastopen failure when disabled, try normal connect instead. X-Git-Tag: release-1.14.0rc1~54 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=520fa842655a056050f7f63b0260160adb4f1ce0;p=thirdparty%2Funbound.git - Fix tcp fastopen failure when disabled, try normal connect instead. --- diff --git a/doc/Changelog b/doc/Changelog index 2758e9c52..8f1c851c7 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,6 @@ +1 September 2021: Wouter + - Fix tcp fastopen failure when disabled, try normal connect instead. + 27 August 2021: Wouter - Fix #533: Negative responses get cached even when setting cache-max-negative-ttl: 1 diff --git a/util/netevent.c b/util/netevent.c index e3eed838f..9a3b210b2 100644 --- a/util/netevent.c +++ b/util/netevent.c @@ -1863,13 +1863,22 @@ comm_point_tcp_handle_write(int fd, struct comm_point* c) if(errno == EINTR || errno == EAGAIN) return 1; /* Not handling EISCONN here as shouldn't ever hit that case.*/ - if(errno != EPIPE && errno != 0 && verbosity < 2) - return 0; /* silence lots of chatter in the logs */ - if(errno != EPIPE && errno != 0) { + if(errno != EPIPE +#ifdef EOPNOTSUPP + /* if /proc/sys/net/ipv4/tcp_fastopen is + * disabled on Linux, sendmsg may return + * 'Operation not supported', if so + * fallthrough to ordinary connect. */ + && errno != EOPNOTSUPP +#endif + && errno != 0) { + if(verbosity < 2) + return 0; /* silence lots of chatter in the logs */ log_err_addr("tcp sendmsg", strerror(errno), &c->repinfo.addr, c->repinfo.addrlen); return 0; } + verbose(VERB_ALGO, "tcp sendmsg for fastopen failed (with %s), try normal connect", strerror(errno)); /* fallthrough to nonFASTOPEN * (MSG_FASTOPEN on Linux 3 produces EPIPE) * we need to perform connect() */