Use "#if" (not "#ifdef") for configure-defined macros.
[rsync/rsync.git] / socket.c
index 549d40d..5d3f009 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
 
@@ -448,10 +452,10 @@ void start_accept_loop(int port, int (*fn)(int, int))
        for (i = 0, maxfd = -1; sp[i] >= 0; i++) {
                if (listen(sp[i], 5) < 0) {
                        rsyserr(FERROR, errno, "listen() on socket failed");
-#ifdef INET6
+#if INET6
                        if (errno == EADDRINUSE && i > 0) {
                                rprintf(FINFO,
-                                   "Try using --ipv4 or --ipv6 to avoid this listen() error.");
+                                   "Try using --ipv4 or --ipv6 to avoid this listen() error.\n");
                        }
 #endif
                        exit_cleanup(RERR_SOCKETIO);
@@ -502,9 +506,6 @@ void start_accept_loop(int port, int (*fn)(int, int))
                        int ret;
                        for (i = 0; sp[i] >= 0; i++)
                                close(sp[i]);
-                       /* open log file in child before possibly giving
-                        * up privileges  */
-                       log_open();
                        ret = fn(fd, fd);
                        close_all();
                        _exit(ret);
@@ -648,7 +649,7 @@ void become_daemon(void)
        }
 
        /* detach from the terminal */
-#ifdef HAVE_SETSID
+#if HAVE_SETSID
        setsid();
 #else
 #ifdef TIOCNOTTY
@@ -723,14 +724,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;