diff options
author | 2020-08-19 11:10:42 +0000 | |
---|---|---|
committer | 2020-08-19 11:10:42 +0000 | |
commit | 55a1066fa0ad3a9b06230aa83a134bae99cd6e91 (patch) | |
tree | 0f1c06561354c782ed2a7288be1a769317d1ca87 | |
parent | Push KERNEL_LOCK/UNLOCK() dance inside trapsignal(). (diff) | |
download | wireguard-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.c | 4 |
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); |