Do this before starting it rather than it shutting down.
 }
 #endif
 
+bool
+ps_inet_canstart(const struct dhcpcd_ctx *ctx)
+{
+
+#ifdef INET
+       if ((ctx->options & (DHCPCD_IPV4 | DHCPCD_MASTER)) ==
+           (DHCPCD_IPV4 | DHCPCD_MASTER))
+               return true;
+#endif
+#if defined(INET6) && !defined(__sun)
+       if (ctx->options & DHCPCD_IPV6)
+               return true;
+#endif
+#ifdef DHCP6
+       if ((ctx->options & (DHCPCD_IPV6 | DHCPCD_MASTER)) ==
+           (DHCPCD_IPV6 | DHCPCD_MASTER))
+               return true;
+#endif
+
+       return false;
+}
+
 static int
 ps_inet_startcb(void *arg)
 {
 
 #ifndef PRIVSEP_INET_H
 #define PRIVSEP_INET_H
 
+bool ps_inet_canstart(const struct dhcpcd_ctx *);
 pid_t ps_inet_start(struct dhcpcd_ctx *);
 int ps_inet_stop(struct dhcpcd_ctx *);
 ssize_t ps_inet_cmd(struct dhcpcd_ctx *, struct ps_msghdr *, struct msghdr *);
 
 
        /* No point in spawning the generic network listener if we're
         * not going to use it. */
-       if (!(ctx->options & (DHCPCD_MASTER | DHCPCD_IPV6)))
+       if (!ps_inet_canstart(ctx))
                goto started_net;
 
        switch (pid = ps_inet_start(ctx)) {
        case -1:
-               if (errno == ENXIO)
-                       return 0;
                return -1;
        case 0:
                return 0;