+}
+
+/* --- @a_switcherr@ --- *
+ *
+ * Arguments: ---
+ *
+ * Returns: ---
+ *
+ * Use: Arrange to report warnings, trace messages, etc. to
+ * administration clients rather than the standard-error stream.
+ *
+ * Obviously this makes no sense unless there is at least one
+ * client established. Calling @a_listen@ won't help with this,
+ * because the earliest a new client can connect is during the
+ * first select-loop iteration, which is too late: some initial
+ * client must have been added manually using @a_create@.
+ */
+
+void a_switcherr(void)
+{
+ T( trace_custom(a_trace, 0);
+ trace(T_ADMIN, "admin: enabled custom tracing"); )
+ flags |= F_INIT;
+}
+
+/* --- @a_signals@ --- *
+ *
+ * Arguments: ---
+ *
+ * Returns: ---
+ *
+ * Use: Establishes handlers for the obvious signals.
+ */
+
+void a_signals(void)
+{
+ struct sigaction sa;
+
+ sig_add(&s_term, SIGTERM, a_sigdie, 0);
+ sig_add(&s_hup, SIGHUP, a_sighup, 0);
+ sigaction(SIGINT, 0, &sa);
+ if (sa.sa_handler != SIG_IGN)
+ sig_add(&s_int, SIGINT, a_sigdie, 0);
+}
+
+/* --- @a_init@ --- *
+ *
+ * Arguments: ---
+ *
+ * Returns: ---
+ *
+ * Use: Creates the admin listening socket.
+ */
+
+void a_init(void)
+{
+#ifdef HAVE_LIBADNS
+ int err;
+#endif
+
+ /* --- Create services table --- */
+
+ sym_create(&a_svcs);
+
+ /* --- Prepare the background name resolver --- */
+