static volatile int pipewrite;
static void set_dns_listeners(void);
+static void set_tftp_listeners(void);
static void check_dns_listeners(time_t now);
static void sig_handler(int sig);
static void async_event(int pipe, time_t now);
pid = getpid();
daemon->pipe_to_parent = -1;
- for (i = 0; i < daemon->max_procs; i++)
- daemon->tcp_pipes[i] = -1;
+
+ if (daemon->port != 0)
+ for (i = 0; i < daemon->max_procs; i++)
+ daemon->tcp_pipes[i] = -1;
#ifdef HAVE_INOTIFY
/* Using inotify, have to select a resolv file at startup */
(timeout == -1 || timeout > 1000))
timeout = 1000;
- set_dns_listeners();
+ if (daemon->port != 0)
+ set_dns_listeners();
+
+#ifdef HAVE_TFTP
+ set_tftp_listeners();
+#endif
#ifdef HAVE_DBUS
if (option_bool(OPT_DBUS))
check_ubus_listeners();
}
#endif
-
- check_dns_listeners(now);
+
+ if (daemon->port != 0)
+ check_dns_listeners(now);
#ifdef HAVE_TFTP
check_tftp_listeners(now);
if (errno != EINTR)
break;
}
- else
+ else if (daemon->port != 0)
for (i = 0 ; i < daemon->max_procs; i++)
if (daemon->tcp_pids[i] == p)
daemon->tcp_pids[i] = 0;
case EVENT_TERM:
/* Knock all our children on the head. */
- for (i = 0; i < daemon->max_procs; i++)
- if (daemon->tcp_pids[i] != 0)
- kill(daemon->tcp_pids[i], SIGALRM);
+ if (daemon->port != 0)
+ for (i = 0; i < daemon->max_procs; i++)
+ if (daemon->tcp_pids[i] != 0)
+ kill(daemon->tcp_pids[i], SIGALRM);
#if defined(HAVE_SCRIPT) && defined(HAVE_DHCP)
/* handle pending lease transitions */
#endif
}
-static void set_dns_listeners(void)
-{
- struct serverfd *serverfdp;
- struct listener *listener;
- struct randfd_list *rfl;
- int i;
-
#ifdef HAVE_TFTP
+static void set_tftp_listeners(void)
+{
int tftp = 0;
struct tftp_transfer *transfer;
+ struct listener *listener;
+
if (!option_bool(OPT_SINGLE_PORT))
for (transfer = daemon->tftp_trans; transfer; transfer = transfer->next)
{
tftp++;
poll_listen(transfer->sockfd, POLLIN);
}
+
+ for (listener = daemon->listeners; listener; listener = listener->next)
+ /* tftp == 0 in single-port mode. */
+ if (tftp <= daemon->tftp_max && listener->tftpfd != -1)
+ poll_listen(listener->tftpfd, POLLIN);
+}
#endif
+
+static void set_dns_listeners(void)
+{
+ struct serverfd *serverfdp;
+ struct listener *listener;
+ struct randfd_list *rfl;
+ int i;
for (serverfdp = daemon->sfds; serverfdp; serverfdp = serverfdp->next)
poll_listen(serverfdp->fd, POLLIN);
we'll be called again when a slot becomes available. */
if (listener->tcpfd != -1 && i >= 0)
poll_listen(listener->tcpfd, POLLIN);
-
-#ifdef HAVE_TFTP
- /* tftp == 0 in single-port mode. */
- if (tftp <= daemon->tftp_max && listener->tftpfd != -1)
- poll_listen(listener->tftpfd, POLLIN);
-#endif
}
if (!option_bool(OPT_DEBUG))
if (listener->fd != -1 && poll_check(listener->fd, POLLIN))
receive_query(listener, now);
-#ifdef HAVE_TFTP
- if (listener->tftpfd != -1 && poll_check(listener->tftpfd, POLLIN))
- tftp_request(listener, now);
-#endif
-
/* check to see if we have a free tcp process slot.
Note that we can't assume that because we had
at least one a poll() time, that we still do.
poll_reset();
if (fd != -1)
poll_listen(fd, POLLIN);
- set_dns_listeners();
+ if (daemon->port != 0)
+ set_dns_listeners();
+#ifdef HAVE_TFTP
+ set_tftp_listeners();
+#endif
set_log_writer();
#ifdef HAVE_DHCP6
now = dnsmasq_time();
check_log_writer(0);
- check_dns_listeners(now);
+ if (daemon->port != 0)
+ check_dns_listeners(now);
#ifdef HAVE_DHCP6
if (daemon->doing_ra && poll_check(daemon->icmp6fd, POLLIN))