- signal(SIGPIPE, SIG_IGN);
- signal(SIGCHLD, SIG_IGN);
+{
+ int sig;
+ struct sigaction action;
+
+ for ( sig = 1; sig < 16; sig++ )
+ {
+ switch( sig )
+ {
+ case 9:
+ case SIGPIPE:
+ case SIGCHLD:
+ case SIGHUP:
+ continue;
+ }
+ if ( signal(sig, SIG_handler) == SIG_ERR )
+ log_error(LOG_LEVEL_FATAL, "Can't set signal-handler for signal %d: %E", sig);
+ }
+ /* SIG_IGN */
+ if ( signal(SIGPIPE, SIG_IGN) == SIG_ERR )
+ log_error(LOG_LEVEL_FATAL, "Can't set SIG_IGN to SIGPIPE: %E");
+ if ( signal(SIGCHLD, SIG_IGN) == SIG_ERR )
+ log_error(LOG_LEVEL_FATAL, "Can't set SIG_IGN to SIGCHLD: %E");
+ /* log file reload */
+ if (!sigaction(SIGHUP,NULL,&action))
+ {
+ action.sa_handler = &SIG_handler;
+ action.sa_flags = SA_RESTART;
+
+ if ( sigaction(SIGHUP,&action,NULL))
+ log_error(LOG_LEVEL_FATAL, "Can't set signal-handler for signal SIGHUP: %E");
+ }
+ else
+ {
+ perror("sigaction");
+ log_error(LOG_LEVEL_FATAL, "Can't get sigaction data for signal SIGHUP");
+ }
+
+}