noip.c: Only fiddle with `errno' from `connect' if we faked things.
authorMark Wooding <mdw@distorted.org.uk>
Sat, 26 Dec 2009 12:15:34 +0000 (12:15 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Sat, 26 Dec 2009 12:15:34 +0000 (12:15 +0000)
Otherwise some programs get confused.

noip.c

diff --git a/noip.c b/noip.c
index 38021db..acb60ef 100644 (file)
--- 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;
 }