diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-02-17 19:30:05 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-02-17 19:30:05 +0100 |
commit | a386ebb78f95a4d9af5b3cc348dd6289bc182f53 (patch) | |
tree | be32bffd6a9a7147940c4d35d5add3474feda1f3 /src/tools | |
parent | tools: do not collide types with libc clashes (diff) | |
download | wireguard-monolithic-historical-a386ebb78f95a4d9af5b3cc348dd6289bc182f53.tar.xz wireguard-monolithic-historical-a386ebb78f95a4d9af5b3cc348dd6289bc182f53.zip |
tools: FreeBSD doesn't have EAI_NODATA
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/config.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/tools/config.c b/src/tools/config.c index 93c39fa..b07aa46 100644 --- a/src/tools/config.c +++ b/src/tools/config.c @@ -224,8 +224,21 @@ static inline bool parse_endpoint(struct sockaddr *endpoint, const char *value) if (!ret) break; timeout = timeout * 3 / 2; - /* The set of return codes that are "permanent failures". All other possibilities are potentially transient. */ - if (ret == EAI_NONAME || ret == EAI_FAIL || ret == EAI_NODATA || timeout >= 90000000) { + /* The set of return codes that are "permanent failures". All other possibilities are potentially transient. + * + * This is according to https://sourceware.org/glibc/wiki/NameResolver which states: + * "From the perspective of the application that calls getaddrinfo() it perhaps + * doesn't matter that much since EAI_FAIL, EAI_NONAME and EAI_NODATA are all + * permanent failure codes and the causes are all permanent failures in the + * sense that there is no point in retrying later." + * + * So this is what we do, except FreeBSD removed EAI_NODATA some time ago, so that's conditional. + */ + if (ret == EAI_NONAME || ret == EAI_FAIL || + #ifdef EAI_NODATA + ret == EAI_NODATA || + #endif + timeout >= 90000000) { free(mutable); fprintf(stderr, "%s: `%s'\n", ret == EAI_SYSTEM ? strerror(errno) : gai_strerror(ret), value); return false; |