Use our own port when connecting to ourself.
[tinc] / src / tincd.c
index 4aba579..ee3ca1c 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: tincd.c,v 1.10.4.81 2003/08/02 21:33:52 guus Exp $
+    $Id: tincd.c,v 1.10.4.83 2003/08/03 09:55:20 guus Exp $
 */
 
 #include "system.h"
@@ -79,7 +79,7 @@ char *pidfilename = NULL;                     /* pid file location */
 char *logfilename = NULL;                      /* log file location */
 char **g_argv;                                 /* a copy of the cmdline arguments */
 
-int exitstatus = 0;
+static int status;
 
 static struct option const long_options[] = {
        {"config", required_argument, NULL, 'c'},
@@ -452,23 +452,10 @@ int main2(int argc, char **argv)
        if(!detach())
                return 1;
                
-       for(;;) {
-               if(setup_network_connections()) {
-                       int status;
-                       status = main_loop();
 
-                       close_network_connections();
-
-                       ifdebug(CONNECTIONS)
-                               dump_device_stats();
-
-                       logger(LOG_NOTICE, _("Terminating"));
-                       return status;
-               }
-
-               logger(LOG_ERR, _("Unrecoverable error"));
-               cp_trace();
+       /* Setup sockets and open device. If it doesn't work, don't give up but try again. */
 
+       while(!setup_network_connections()) {
                if(do_detach) {
                        logger(LOG_NOTICE, _("Restarting in %d seconds!"), maxtimeout);
                        sleep(maxtimeout);
@@ -477,4 +464,18 @@ int main2(int argc, char **argv)
                        return 1;
                }
        }
+
+       /* Start main loop. It only exits when tinc is killed. */
+
+       status = main_loop();
+
+       /* Shutdown properly. */
+
+       close_network_connections();
+
+       ifdebug(CONNECTIONS)
+               dump_device_stats();
+
+       logger(LOG_NOTICE, _("Terminating"));
+       return status;
 }