If there is no lchown(), don't try to set the user & group of a symlink.
[rsync/rsync.git] / socket.c
index 549d40d..5810c48 100644 (file)
--- a/socket.c
+++ b/socket.c
@@ -369,8 +369,12 @@ static int *open_socket_in(int type, int port, const char *bind_address,
 
 #ifdef IPV6_V6ONLY
                if (resp->ai_family == AF_INET6) {
-                       setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
-                                  (char *)&one, sizeof one);
+                       if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
+                                      (char *)&one, sizeof one) < 0
+                           && default_af_hint != AF_INET6) {
+                               close(s);
+                               continue;
+                       }
                }
 #endif
 
@@ -723,14 +727,16 @@ static int socketpair_tcp(int fd[2])
                goto failed;
 
        close(listener);
+       listener = -1;
+
+       set_blocking(fd[1]);
+
        if (connect_done == 0) {
                if (connect(fd[1], (struct sockaddr *)&sock, sizeof sock) != 0
                    && errno != EISCONN)
                        goto failed;
        }
 
-       set_blocking(fd[1]);
-
        /* all OK! */
        return 0;