diff --git a/GCDWebServer/Core/GCDWebServer.h b/GCDWebServer/Core/GCDWebServer.h index 7075313..e9b0565 100644 --- a/GCDWebServer/Core/GCDWebServer.h +++ b/GCDWebServer/Core/GCDWebServer.h @@ -351,9 +351,9 @@ extern NSString* const GCDWebServerAuthenticationMethod_DigestAccess; - (BOOL)runWithPort:(NSUInteger)port bonjourName:(NSString*)name; /** - * Runs the server synchronously using -startWithOptions: until a SIGINT signal - * is received i.e. Ctrl-C. This method is intended to be used by command line - * tools. + * Runs the server synchronously using -startWithOptions: until a SIGTERM or + * SIGINT signal is received i.e. Ctrl-C in Terminal. This method is intended to + * be used by command line tools. * * Returns NO if the server failed to start and sets "error" argument if not NULL. * diff --git a/GCDWebServer/Core/GCDWebServer.m b/GCDWebServer/Core/GCDWebServer.m index da555c0..8355930 100644 --- a/GCDWebServer/Core/GCDWebServer.m +++ b/GCDWebServer/Core/GCDWebServer.m @@ -668,8 +668,9 @@ static inline NSString* _EncodeBase64(NSString* string) { DCHECK([NSThread isMainThread]); BOOL success = NO; _run = YES; - void (*handler)(int) = signal(SIGINT, _SignalHandler); - if (handler != SIG_ERR) { + void (*termHandler)(int) = signal(SIGTERM, _SignalHandler); + void (*intHandler)(int) = signal(SIGINT, _SignalHandler); + if ((termHandler != SIG_ERR) && (intHandler != SIG_ERR)) { if ([self startWithOptions:options error:error]) { while (_run) { CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1.0, true); @@ -677,7 +678,8 @@ static inline NSString* _EncodeBase64(NSString* string) { [self stop]; success = YES; } - signal(SIGINT, handler); + signal(SIGINT, intHandler); + signal(SIGTERM, termHandler); } return success; }