]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
Move NT specific add to completion ports inside of the open_socket code
authorDanny Mayer <mayer@ntp.org>
Tue, 10 Feb 2004 21:42:03 +0000 (16:42 -0500)
committerDanny Mayer <mayer@ntp.org>
Tue, 10 Feb 2004 21:42:03 +0000 (16:42 -0500)
bk: 4029502bf9-1DER1eLpyftFhGv6J8Q

ntpd/ntp_io.c

index 7bcc927250661619265e0aea046985c7acaa409d..c1217f398b8f6e1a78dd0f558a23f559a54acecc 100644 (file)
@@ -143,7 +143,7 @@ fd_set activefds;
 int maxactivefd;
 
 static int create_sockets      P((u_short));
-static SOCKET  open_socket     P((struct sockaddr_storage *, int, int));
+static SOCKET  open_socket     P((struct sockaddr_storage *, int, int, struct interface *));
 static void    close_socket    P((SOCKET));
 #ifdef REFCLOCK
 static void    close_file      P((SOCKET));
@@ -506,7 +506,7 @@ create_sockets(
 #endif
        for (i = 0; i < ninterfaces; i++) {
                inter_list[i].fd = open_socket(&inter_list[i].sin,
-                   inter_list[i].flags & INT_BROADCAST, 0);
+                   inter_list[i].flags & INT_BROADCAST, 0, &inter_list[i]);
                if (inter_list[i].fd != INVALID_SOCKET)
                        msyslog(LOG_INFO, "Listening on interface %s, %s#%d",
                                inter_list[i].name,
@@ -517,11 +517,6 @@ create_sockets(
                        msyslog(LOG_INFO, "Listening on broadcast address %s#%d",
                                stoa((&inter_list[i].bcast)),
                                NTP_PORT);
-#if defined (HAVE_IO_COMPLETION_PORT)
-               if (inter_list[i].fd != INVALID_SOCKET) {
-                       io_completion_port_add_socket(inter_list[i].fd, &inter_list[i]);
-               }
-#endif
        }
 
        /*
@@ -595,18 +590,19 @@ io_setbclient(void)
                if (!(inter_list[i].flags & INT_BROADCAST))
                        continue;
 
+               /* Skip the loopback addresses */
+               if (inter_list[i].flags & INT_LOOPBACK)
+                       continue;
+
                /* Do we already have the broadcast address open? */
                if (inter_list[i].flags & INT_BCASTOPEN)
                        continue;
 
                inter_list[i].bfd = open_socket(&inter_list[i].bcast,
-                   INT_BROADCAST, 1);
+                   INT_BROADCAST, 1, &inter_list[i]);
                if (inter_list[i].bfd != INVALID_SOCKET) {
                        inter_list[i].flags |= INT_BCASTOPEN;
                        nif++;
-#if defined (HAVE_IO_COMPLETION_PORT)
-                       io_completion_port_add_socket(inter_list[i].bfd, &inter_list[i]);
-#endif
                }
 #ifdef DEBUG
                if (debug) {
@@ -714,7 +710,7 @@ io_multicast_add(
                * works under SunOS 4.x, but not OSF1 .. :-(
                */
                set_reuseaddr(1);
-               s = open_socket((struct sockaddr_storage*)sinp, 0, 1);
+               s = open_socket((struct sockaddr_storage*)sinp, 0, 1, &inter_list[i]);
                set_reuseaddr(0);
                if (s == INVALID_SOCKET) {
                        memset((char *)&inter_list[i], 0, sizeof(struct interface));
@@ -737,9 +733,6 @@ io_multicast_add(
                        (void) strncpy(inter_list[i].name, "multicast",
                        sizeof(inter_list[i].name));
                        ((struct sockaddr_in*)&inter_list[i].mask)->sin_addr.s_addr = htonl(~(u_int32)0);
-#if defined (HAVE_IO_COMPLETION_PORT)
-                       io_completion_port_add_socket(inter_list[i].fd, &inter_list[i]);
-#endif
                }
 
                /*
@@ -797,7 +790,7 @@ io_multicast_add(
                 * works under SunOS 4.x, but not OSF1 .. :-(
                 */
                set_reuseaddr(1);
-               s = open_socket((struct sockaddr_storage*)sin6p, 0, 1);
+               s = open_socket((struct sockaddr_storage*)sin6p, 0, 1, &inter_list[i]);
                set_reuseaddr(0);
                if(s == INVALID_SOCKET){
                        memset((char *)&inter_list[i], 0, sizeof(struct interface));
@@ -820,9 +813,6 @@ io_multicast_add(
                        (void)strncpy(inter_list[i].name, "multicast",
                           sizeof(inter_list[i].name));
                        memset(&(((struct sockaddr_in6*)&inter_list[i].mask)->sin6_addr), 1, sizeof(struct in6_addr));
-#if defined (HAVE_IO_COMPLETION_PORT)
-                       io_completion_port_add_socket(inter_list[i].fd, &inter_list[i]);
-#endif
                }
 
                /*
@@ -1018,7 +1008,8 @@ static SOCKET
 open_socket(
        struct sockaddr_storage *addr,
        int flags,
-       int turn_off_reuse
+       int turn_off_reuse,
+       struct interface *interf
        )
 {
        int errval;
@@ -1276,6 +1267,13 @@ open_socket(
 # endif
 #endif /* SYS_WINNT || VMS */
 
+
+#if defined (HAVE_IO_COMPLETION_PORT)
+/*
+ * Add the socket to the completion port
+ */
+       io_completion_port_add_socket(fd, interf);
+#endif
        return fd;
 }