diff options
author | mav <mav@FreeBSD.org> | 2008-06-22 22:14:02 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2008-06-22 22:14:02 +0000 |
commit | 2ee7f37628c9a058ef5d75c44957a23f0a56d857 (patch) | |
tree | 0a8eed37e1bfcbc8f6c9b9c9b30f18aca0733794 /sbin/natd/natd.c | |
parent | 1e17e3cd45bf4ec8798dbb1b2f8b9d03917ac322 (diff) | |
download | FreeBSD-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.c | 25 |
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; } } |