--- src/openvpn/mtcp.c +++ src/openvpn/mtcp.c @@ -625,11 +625,27 @@ */ if (touched && IS_SIG(&touched->context)) { + int exit_after_close = 0; + + if (touched->context.c2.link_socket->inetd == INETD_NOWAIT) + { + exit_after_close = 1; + } + if (mi == touched) { mi = NULL; } multi_close_instance_on_signal(m, touched); + + /* + * If this socket results from an inetd-nowait - connection + * it has to be the only one and we have to exit. + */ + if (exit_after_close) + { + m->top.sig->signal_received = SIGTERM; + } } } --- src/openvpn/options.c +++ src/openvpn/options.c @@ -2033,10 +2033,12 @@ msg(M_USAGE, "--inetd nowait can only be used in TLS mode"); } +#if 0 if (options->inetd == INETD_NOWAIT && dev != DEV_TYPE_TAP) { msg(M_USAGE, "--inetd nowait only makes sense in --dev tap mode"); } +#endif if (options->lladdr && dev != DEV_TYPE_TAP) @@ -2275,10 +2277,12 @@ { msg(M_USAGE, "--shaper cannot be used with --mode server"); } +#if 0 if (options->inetd) { msg(M_USAGE, "--inetd cannot be used with --mode server"); } +#endif if (options->ipchange) { msg(M_USAGE, "--ipchange cannot be used with --mode server (use --client-connect instead)"); @@ -2894,10 +2898,12 @@ * In forking TCP server mode, you don't need to ifconfig * the tap device (the assumption is that it will be bridged). */ +#if 0 if (options->inetd == INETD_NOWAIT) { options->ifconfig_noexec = true; } +#endif #ifdef _WIN32 if ((dev == DEV_TYPE_TUN || dev == DEV_TYPE_TAP) && !options->route_delay_defined) --- src/openvpn/socket.c +++ src/openvpn/socket.c @@ -1900,7 +1900,9 @@ { ASSERT(accept_from); ASSERT(sock->info.proto == PROTO_TCP_SERVER); +#if 0 ASSERT(!sock->inetd); +#endif sock->sd = accept_from->sd; /* inherit (possibly guessed) info AF from parent context */ sock->info.af = accept_from->info.af;