From 6df6f816f8152954dd3499b7c4048099994a28a7 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Sat, 26 Dec 2009 12:15:34 +0000 Subject: [PATCH] noip.c: Only fiddle with `errno' from `connect' if we faked things. Otherwise some programs get confused. --- noip.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/noip.c b/noip.c index 38021db..acb60ef 100644 --- a/noip.c +++ b/noip.c @@ -872,17 +872,22 @@ int connect(int sk, const struct sockaddr *sa, socklen_t len) int fixup_p = 0; int rc; - if (sa->sa_family == AF_INET) { - PRESERVING_ERRNO({ - do_implicit_bind(sk, &sa, &len, &sun); - fixup_p = 1; - }); - } - rc = real_connect(sk, sa, len); - if (rc < 0) { - switch (errno) { - case ENOENT: errno = ECONNREFUSED; break; - } + switch (sa->sa_family) { + case AF_INET: + PRESERVING_ERRNO({ + do_implicit_bind(sk, &sa, &len, &sun); + fixup_p = 1; + }); + rc = real_connect(sk, sa, len); + if (rc < 0) { + switch (errno) { + case ENOENT: errno = ECONNREFUSED; break; + } + } + break; + default: + rc = real_connect(sk, sa, len); + break; } return rc; } -- 2.11.0