summaryrefslogtreecommitdiffstats
path: root/sbin/natd/natd.c
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2008-06-22 22:14:02 +0000
committermav <mav@FreeBSD.org>2008-06-22 22:14:02 +0000
commit2ee7f37628c9a058ef5d75c44957a23f0a56d857 (patch)
tree0a8eed37e1bfcbc8f6c9b9c9b30f18aca0733794 /sbin/natd/natd.c
parent1e17e3cd45bf4ec8798dbb1b2f8b9d03917ac322 (diff)
downloadFreeBSD-src-2ee7f37628c9a058ef5d75c44957a23f0a56d857.zip
FreeBSD-src-2ee7f37628c9a058ef5d75c44957a23f0a56d857.tar.gz
Add exit_delay parameter to control daemon exit delay after signal.
PR: bin/58696 Submitted by: sp@alkor.ru
Diffstat (limited to 'sbin/natd/natd.c')
-rw-r--r--sbin/natd/natd.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/sbin/natd/natd.c b/sbin/natd/natd.c
index 64d612e..3a5a644 100644
--- a/sbin/natd/natd.c
+++ b/sbin/natd/natd.c
@@ -147,6 +147,8 @@ static const char* pidName;
static int routeSock;
static int globalPort;
static int divertGlobal;
+static int exitDelay;
+
int main (int argc, char** argv)
{
@@ -174,6 +176,7 @@ int main (int argc, char** argv)
icmpSock = -1;
fdMax = -1;
divertGlobal = -1;
+ exitDelay = EXIT_DELAY;
ParseArgs (argc, argv);
/*
@@ -347,7 +350,10 @@ int main (int argc, char** argv)
*/
siginterrupt(SIGTERM, 1);
siginterrupt(SIGHUP, 1);
- signal (SIGTERM, InitiateShutdown);
+ if (exitDelay)
+ signal(SIGTERM, InitiateShutdown);
+ else
+ signal(SIGTERM, Shutdown);
signal (SIGHUP, RefreshAddr);
/*
* Set alias address if it has been given.
@@ -984,7 +990,7 @@ static void InitiateShutdown (int sig __unused)
*/
siginterrupt(SIGALRM, 1);
signal (SIGALRM, Shutdown);
- alarm (10);
+ ualarm(exitDelay*1000, 1000);
}
static void Shutdown (int sig __unused)
@@ -1019,7 +1025,8 @@ enum Option {
PunchFW,
SkinnyPort,
LogIpfwDenied,
- PidFile
+ PidFile,
+ ExitDelay
};
enum Param {
@@ -1277,6 +1284,13 @@ static struct OptionInfo optionTable[] = {
"name of aliasing engine instance",
"instance",
NULL },
+ { ExitDelay,
+ 0,
+ Numeric,
+ "ms",
+ "delay in ms before daemon exit after signal",
+ "exit_delay",
+ NULL },
};
static void ParseOption (const char* option, const char* parms)
@@ -1479,6 +1493,11 @@ static void ParseOption (const char* option, const char* parms)
case Instance:
NewInstance(strValue);
break;
+ case ExitDelay:
+ if (numValue < 0 || numValue > MAX_EXIT_DELAY)
+ errx(1, "Incorrect exit delay: %d", numValue);
+ exitDelay = numValue;
+ break;
}
}
OpenPOWER on IntegriCloud