wg: FreeBSD doesn't have EAI_NODATA
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
5ecc49a62f
commit
ca5d2708e0
1 changed files with 15 additions and 2 deletions
17
src/config.c
17
src/config.c
|
@ -224,8 +224,21 @@ static inline bool parse_endpoint(struct sockaddr *endpoint, const char *value)
|
||||||
if (!ret)
|
if (!ret)
|
||||||
break;
|
break;
|
||||||
timeout = timeout * 3 / 2;
|
timeout = timeout * 3 / 2;
|
||||||
/* The set of return codes that are "permanent failures". All other possibilities are potentially transient. */
|
/* 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) {
|
*
|
||||||
|
* 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);
|
free(mutable);
|
||||||
fprintf(stderr, "%s: `%s'\n", ret == EAI_SYSTEM ? strerror(errno) : gai_strerror(ret), value);
|
fprintf(stderr, "%s: `%s'\n", ret == EAI_SYSTEM ? strerror(errno) : gai_strerror(ret), value);
|
||||||
return false;
|
return false;
|
||||||
|
|
Loading…
Reference in a new issue