-#ifdef CVSDATE
- snprintf( NGIRCd_Version, sizeof NGIRCd_Version,"%s %s(%s)-%s", PACKAGE_NAME, PACKAGE_VERSION, CVSDATE, NGIRCd_VersionAddition);
-#else
- snprintf( NGIRCd_Version, sizeof NGIRCd_Version, "%s %s-%s", PACKAGE_NAME, PACKAGE_VERSION, NGIRCd_VersionAddition);
-#endif
-} /* Fill_Version */
-
-
-/**
- * Reload the server configuration file.
- */
-GLOBAL void
-NGIRCd_Rehash( void )
-{
- char old_name[CLIENT_ID_LEN];
-
- Log( LOG_NOTICE|LOG_snotice, "Re-reading configuration NOW!" );
- NGIRCd_SignalRehash = false;
-
- /* Close down all listening sockets */
- Conn_ExitListeners( );
-
- /* Remember old server name */
- strlcpy( old_name, Conf_ServerName, sizeof old_name );
-
- /* Re-read configuration ... */
- Conf_Rehash( );
-
- /* Recover old server name: it can't be changed during run-time */
- if( strcmp( old_name, Conf_ServerName ) != 0 )
- {
- strcpy( Conf_ServerName, old_name );
- Log( LOG_ERR, "Can't change \"ServerName\" on runtime! Ignored new name." );
- }
-
- /* Create new pre-defined channels */
- Channel_InitPredefined( );
-
- /* Start listening on sockets */
- Conn_InitListeners( );
-
- /* Sync configuration with established connections */
- Conn_SyncServerStruct( );
-
- Log( LOG_NOTICE|LOG_snotice, "Re-reading of configuration done." );
-} /* NGIRCd_Rehash */
-
-
-/**
- * Initialize the signal handler.
- */
-LOCAL void
-Initialize_Signal_Handler( void )
-{
- /* Signal-Handler initialisieren: einige Signale
- * werden ignoriert, andere speziell behandelt. */
-
-#ifdef HAVE_SIGACTION
- /* sigaction() ist vorhanden */
-
- struct sigaction saction;
-
- /* Signal-Struktur initialisieren */
- memset( &saction, 0, sizeof( saction ));
- saction.sa_handler = Signal_Handler;
-#ifdef SA_RESTART
- saction.sa_flags |= SA_RESTART;
-#endif
-#ifdef SA_NOCLDWAIT
- saction.sa_flags |= SA_NOCLDWAIT;
-#endif
-
- /* Signal-Handler einhaengen */
- sigaction( SIGINT, &saction, NULL );
- sigaction( SIGQUIT, &saction, NULL );
- sigaction( SIGTERM, &saction, NULL);
- sigaction( SIGHUP, &saction, NULL);
- sigaction( SIGCHLD, &saction, NULL);
-
- /* einige Signale ignorieren */
- saction.sa_handler = SIG_IGN;
- sigaction( SIGPIPE, &saction, NULL );
-#else
- /* kein sigaction() vorhanden */
-
- /* Signal-Handler einhaengen */
- signal( SIGINT, Signal_Handler );
- signal( SIGQUIT, Signal_Handler );
- signal( SIGTERM, Signal_Handler );
- signal( SIGHUP, Signal_Handler );
- signal( SIGCHLD, Signal_Handler );
-
- /* einige Signale ignorieren */
- signal( SIGPIPE, SIG_IGN );
-#endif
-} /* Initialize_Signal_Handler */
-
-
-/**
- * Signal handler of ngIRCd.
- * This function is called whenever ngIRCd catches a signal sent by the
- * user and/or the system to it. For example SIGTERM and SIGHUP.
- * @param Signal Number of the signal to handle.
- */
-LOCAL void
-Signal_Handler( int Signal )
-{
- switch( Signal )
- {
- case SIGTERM:
- case SIGINT:
- case SIGQUIT:
- /* wir soll(t)en uns wohl beenden ... */
- NGIRCd_SignalQuit = true;
- break;
- case SIGHUP:
- /* Konfiguration neu einlesen: */
- NGIRCd_SignalRehash = true;
- break;
- case SIGCHLD:
- /* Child-Prozess wurde beendet. Zombies vermeiden: */
- while( waitpid( -1, NULL, WNOHANG ) > 0);
- break;
-#ifdef DEBUG
- default:
- /* unbekanntes bzw. unbehandeltes Signal */
- Log( LOG_DEBUG, "Got signal %d! Ignored.", Signal );
-#endif
- }
-} /* Signal_Handler */