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
}
/*
stoa((&inter_list[i].mask)));
}
}
-#endif
-#if defined (HAVE_IO_COMPLETION_PORT)
- for (i = 0; i < ninterfaces; i++) {
- io_completion_port_add_socket(&inter_list[i]);
- add_socket_to_list(inter_list[i].fd);
- }
#endif
return ninterfaces;
}
#ifdef OPEN_BCAST_SOCKET /* Was: !SYS_DOMAINOS && !SYS_LINUX */
inter_list[i].bfd = open_socket(&inter_list[i].bcast,
INT_BROADCAST, 1);
- if (inter_list[i].bfd != INVALID_SOCKET)
+ if (inter_list[i].bfd != INVALID_SOCKET) {
inter_list[i].flags |= INT_BCASTOPEN;
+#if defined (HAVE_IO_COMPLETION_PORT)
+ io_completion_port_add_socket(inter_list[i].bfd, &inter_list[i]);
+#endif
+ }
#ifdef DEBUG
if (debug) {
if (inter_list[i].bfd != INVALID_SOCKET)
(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
}
/*
(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
}
/*
maxactivefd = fd;
FD_SET(fd, &activefds);
#endif
-
+ add_socket_to_list(fd);
/*
* set non-blocking,
*/
newmax = i;
maxactivefd = newmax;
}
-#else
- delete_socket_from_list(fd);
#endif
+ delete_socket_from_list(fd);
+
}
newmax = i;
maxactivefd = newmax;
}
-#else
- delete_socket_from_list(fd);
#endif
+ delete_socket_from_list(fd);
+
}
return 0;
}
-/* Queue a receiver on a socket. Returns 0 if no buffer can be queud */
+/* Queue a receiver on a socket. Returns 0 if no buffer can be queued */
static unsigned long QueueSocketRecv(SOCKET s) {
* ReadFile() is less efficient.
*/
extern void
-io_completion_port_add_socket(struct interface *inter)
+io_completion_port_add_socket(SOCKET fd, struct interface *inter)
{
- if (NULL == CreateIoCompletionPort((HANDLE) inter->fd, hIoCompletionPort, (DWORD) inter, 0)) {
- msyslog(LOG_ERR, "Can't add socket to i/o completion port: %m");
+ if (fd != INVALID_SOCKET) {
+ if (NULL == CreateIoCompletionPort((HANDLE) fd, hIoCompletionPort,
+ (DWORD) inter, 0)) {
+ msyslog(LOG_ERR, "Can't add socket to i/o completion port: %m");
+ }
+ else QueueSocketRecv(fd);
}
- else QueueSocketRecv(inter->fd);
}