*/
static u_short sys_interphase = 0;
-static input_handler_t input_handler;
-
static endpt * new_interface(endpt *);
static void add_interface(endpt *);
static int update_interfaces(u_short, interface_receiver_t,
#if !defined(HAVE_IO_COMPLETION_PORT)
static inline int read_network_packet (SOCKET, struct interface *, l_fp);
static void ntpd_addremove_io_fd (int, int, int);
+static input_handler_t input_handler;
#ifdef REFCLOCK
static inline int read_refclock_packet (SOCKET, struct refclockio *, l_fp);
#endif
return (buflen);
}
+/*
+ * attempt to handle io (select()/signaled IO)
+ */
+void
+io_handler(void)
+{
+# ifndef HAVE_SIGNALED_IO
+ fd_set rdfdes;
+ int nfound;
+
+ /*
+ * Use select() on all on all input fd's for unlimited
+ * time. select() will terminate on SIGALARM or on the
+ * reception of input. Using select() means we can't do
+ * robust signal handling and we get a potential race
+ * between checking for alarms and doing the select().
+ * Mostly harmless, I think.
+ */
+ /*
+ * On VMS, I suspect that select() can't be interrupted
+ * by a "signal" either, so I take the easy way out and
+ * have select() time out after one second.
+ * System clock updates really aren't time-critical,
+ * and - lacking a hardware reference clock - I have
+ * yet to learn about anything else that is.
+ */
+ rdfdes = activefds;
+# if !defined(VMS) && !defined(SYS_VXWORKS)
+ nfound = select(maxactivefd + 1, &rdfdes, NULL,
+ NULL, NULL);
+# else /* VMS, VxWorks */
+ /* make select() wake up after one second */
+ {
+ struct timeval t1;
+
+ t1.tv_sec = 1;
+ t1.tv_usec = 0;
+ nfound = select(maxactivefd + 1,
+ &rdfdes, NULL, NULL,
+ &t1);
+ }
+# endif /* VMS, VxWorks */
+ if (nfound > 0) {
+ l_fp ts;
+
+ get_systime(&ts);
+
+ input_handler(&ts);
+ } else if (nfound == -1 && errno != EINTR) {
+ msyslog(LOG_ERR, "select() error: %m");
+ }
+# ifdef DEBUG
+ else if (debug > 4) {
+ msyslog(LOG_DEBUG, "select(): nfound=%d, error: %m", nfound);
+ } else {
+ DPRINTF(1, ("select() returned %d: %m\n", nfound));
+ }
+# endif /* DEBUG */
+# else /* HAVE_SIGNALED_IO */
+ wait_for_signal();
+# endif /* HAVE_SIGNALED_IO */
+}
/*
* input_handler - receive packets asynchronously
}
return;
}
-#endif
+#endif /* HAVE_IO_COMPLETION_PORT */
/*
}
#endif
-void
-io_handler(void)
-{
-# ifndef HAVE_SIGNALED_IO
- fd_set rdfdes;
- int nfound;
-# endif
- /*
- * Use select() on all on all input fd's for unlimited
- * time. select() will terminate on SIGALARM or on the
- * reception of input. Using select() means we can't do
- * robust signal handling and we get a potential race
- * between checking for alarms and doing the select().
- * Mostly harmless, I think.
- */
- /*
- * On VMS, I suspect that select() can't be interrupted
- * by a "signal" either, so I take the easy way out and
- * have select() time out after one second.
- * System clock updates really aren't time-critical,
- * and - lacking a hardware reference clock - I have
- * yet to learn about anything else that is.
- */
-# ifndef HAVE_SIGNALED_IO
- rdfdes = activefds;
-# if !defined(VMS) && !defined(SYS_VXWORKS)
- nfound = select(maxactivefd + 1, &rdfdes, NULL,
- NULL, NULL);
-# else /* VMS, VxWorks */
- /* make select() wake up after one second */
- {
- struct timeval t1;
-
- t1.tv_sec = 1;
- t1.tv_usec = 0;
- nfound = select(maxactivefd + 1,
- &rdfdes, NULL, NULL,
- &t1);
- }
-# endif /* VMS, VxWorks */
- if (nfound > 0) {
- l_fp ts;
-
- get_systime(&ts);
-
- input_handler(&ts);
- } else if (nfound == -1 && errno != EINTR) {
- msyslog(LOG_ERR, "select() error: %m");
- }
-# ifdef DEBUG
- else if (debug > 4) {
- msyslog(LOG_DEBUG, "select(): nfound=%d, error: %m", nfound);
- } else {
- DPRINTF(1, ("select() returned %d: %m\n", nfound));
- }
-# endif /* DEBUG */
-# else /* HAVE_SIGNALED_IO */
- wait_for_signal();
-# endif /* HAVE_SIGNALED_IO */
-}
-