summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkn <kn@openbsd.org>2020-08-19 11:10:42 +0000
committerkn <kn@openbsd.org>2020-08-19 11:10:42 +0000
commit55a1066fa0ad3a9b06230aa83a134bae99cd6e91 (patch)
tree0f1c06561354c782ed2a7288be1a769317d1ca87
parentPush KERNEL_LOCK/UNLOCK() dance inside trapsignal(). (diff)
downloadwireguard-openbsd-55a1066fa0ad3a9b06230aa83a134bae99cd6e91.tar.xz
wireguard-openbsd-55a1066fa0ad3a9b06230aa83a134bae99cd6e91.zip
Handle EADDRNOAVAIL from connect(2) gracefully
The server's DNS name may yield multiple addresses of different address families; in case the local client has no suitable address, i.e. connect(2) fails with EADDRNOTAVAIL, do not fail hard but try the next address instead. Report (IPv6 only client with dualstack server) and diff from Sasha Romijn. OK job
-rw-r--r--usr.bin/rsync/socket.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/usr.bin/rsync/socket.c b/usr.bin/rsync/socket.c
index f0932bf823a..86ecc204f48 100644
--- a/usr.bin/rsync/socket.c
+++ b/usr.bin/rsync/socket.c
@@ -1,4 +1,4 @@
-/* $Id: socket.c,v 1.27 2019/08/09 13:11:26 claudio Exp $ */
+/* $Id: socket.c,v 1.28 2020/08/19 11:10:42 kn Exp $ */
/*
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
*
@@ -101,6 +101,8 @@ inet_connect(int *sd, const struct source *src, const char *host,
c = connect(*sd, (const struct sockaddr *)&src->sa, src->salen);
if (c == -1) {
+ if (errno == EADDRNOTAVAIL)
+ return 0;
if (errno == ECONNREFUSED || errno == EHOSTUNREACH) {
WARNX("connect refused: %s, %s",
src->ip, host);