don't rely on AF_MAX (comes from kernel include): check for nil explicitly,
[unix-history] / usr / src / sbin / routed / main.c
index 99273a1..9c766eb 100644 (file)
@@ -11,7 +11,7 @@ char copyright[] =
 #endif not lint
 
 #ifndef lint
 #endif not lint
 
 #ifndef lint
-static char sccsid[] = "@(#)main.c     5.1 (Berkeley) %G%";
+static char sccsid[] = "@(#)main.c     5.6 (Berkeley) %G%";
 #endif not lint
 
 /*
 #endif not lint
 
 /*
@@ -43,7 +43,8 @@ main(argc, argv)
        u_char retry;
        
        argv0 = argv;
        u_char retry;
        
        argv0 = argv;
-       openlog("routed", LOG_PID, 0);
+       openlog("routed", LOG_PID | LOG_ODELAY, LOG_DAEMON);
+       setlogmask(LOG_UPTO(LOG_WARNING));
        sp = getservbyname("router", "udp");
        if (sp == NULL) {
                fprintf(stderr, "routed: router/udp: unknown service\n");
        sp = getservbyname("router", "udp");
        if (sp == NULL) {
                fprintf(stderr, "routed: router/udp: unknown service\n");
@@ -68,6 +69,12 @@ main(argc, argv)
                }
                if (strcmp(*argv, "-t") == 0) {
                        tracepackets++;
                }
                if (strcmp(*argv, "-t") == 0) {
                        tracepackets++;
+                       setlogmask(LOG_UPTO(LOG_DEBUG));
+                       argv++, argc--;
+                       continue;
+               }
+               if (strcmp(*argv, "-d") == 0) {
+                       setlogmask(LOG_UPTO(LOG_DEBUG));
                        argv++, argc--;
                        continue;
                }
                        argv++, argc--;
                        continue;
                }
@@ -88,7 +95,7 @@ main(argc, argv)
                        exit(0);
                for (t = 0; t < 20; t++)
                        if (t != s)
                        exit(0);
                for (t = 0; t < 20; t++)
                        if (t != s)
-                               (void) close(cc);
+                               (void) close(t);
                (void) open("/", 0);
                (void) dup2(0, 1);
                (void) dup2(0, 2);
                (void) open("/", 0);
                (void) dup2(0, 1);
                (void) dup2(0, 2);
@@ -159,8 +166,7 @@ process(fd)
        }
        if (fromlen != sizeof (struct sockaddr_in))
                return;
        }
        if (fromlen != sizeof (struct sockaddr_in))
                return;
-#define        mask(s) (1<<((s)-1))
-       omask = sigblock(mask(SIGALRM));
+       omask = sigblock(sigmask(SIGALRM));
        rip_input(&from, cc);
        sigsetmask(omask);
 }
        rip_input(&from, cc);
        sigsetmask(omask);
 }
@@ -169,29 +175,22 @@ getsocket(domain, type, sin)
        int domain, type;
        struct sockaddr_in *sin;
 {
        int domain, type;
        struct sockaddr_in *sin;
 {
-       int retry, s, on = 1;
+       int s, on = 1;
 
 
-       retry = 1;
-       while ((s = socket(domain, type, 0, 0)) < 0 && retry) {
+       if ((s = socket(domain, type, 0)) < 0) {
                perror("socket");
                perror("socket");
-               sleep(5 * retry);
-               retry <<= 1;
-       }
-       if (retry == 0) {
                syslog(LOG_ERR, "socket: %m");
                return (-1);
        }
        if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof (on)) < 0) {
                syslog(LOG_ERR, "setsockopt SO_BROADCAST: %m");
                syslog(LOG_ERR, "socket: %m");
                return (-1);
        }
        if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, &on, sizeof (on)) < 0) {
                syslog(LOG_ERR, "setsockopt SO_BROADCAST: %m");
-               exit(1);
+               close(s);
+               return (-1);
        }
        }
-       while (bind(s, sin, sizeof (*sin), 0) < 0 && retry) {
+       if (bind(s, sin, sizeof (*sin), 0) < 0) {
                perror("bind");
                perror("bind");
-               sleep(5 * retry);
-               retry <<= 1;
-       }
-       if (retry == 0) {
                syslog(LOG_ERR, "bind: %m");
                syslog(LOG_ERR, "bind: %m");
+               close(s);
                return (-1);
        }
        return (s);
                return (-1);
        }
        return (s);