]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/ngircd.c
- IRC_PING() ist, wenn nicht im "strict RFC"-Mode, toleranter und akzptiert
[ngircd-alex.git] / src / ngircd / ngircd.c
index 3a784afeb57edc85b5913a7adcd327877c3f5626..113cecabf848cda2246ff08c278fd69c7b50edda 100644 (file)
@@ -9,11 +9,33 @@
  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
  * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
  *
- * $Id: ngircd.c,v 1.24 2002/02/19 20:08:24 alex Exp $
+ * $Id: ngircd.c,v 1.31 2002/03/10 17:50:48 alex Exp $
  *
  * ngircd.c: Hier beginnt alles ;-)
  *
  * $Log: ngircd.c,v $
+ * Revision 1.31  2002/03/10 17:50:48  alex
+ * - Handling von "--version" und "--help" nochmal geaendert ...
+ *
+ * Revision 1.30  2002/03/10 17:45:41  alex
+ * - bei "ngircd --version" werden nun die eincompilierten Pfade angezeigt.
+ *
+ * Revision 1.29  2002/03/06 15:36:04  alex
+ * - stderr wird nun in eine Datei umgelenkt (ngircd.err). Wenn der Server
+ *   nicht im Debug-Modus laeuft, so wird diese bei Programmende geloescht.
+ *
+ * Revision 1.28  2002/02/27 23:24:29  alex
+ * - ueberfluessige Init- und Exit-Funktionen entfernt.
+ *
+ * Revision 1.27  2002/02/25 11:42:47  alex
+ * - wenn ein System sigaction() nicht kennt, so wird nun signal() verwendet.
+ *
+ * Revision 1.26  2002/02/23 19:06:47  alex
+ * - fuer SIGCHLD wird nun auch SA_NOCLDWAIT gesetzt, wenn vorhanden.
+ *
+ * Revision 1.25  2002/02/19 20:30:47  alex
+ * - SA_RESTART wird fuer Signale nur noch gesetzt, wenn es definiert ist.
+ *
  * Revision 1.24  2002/02/19 20:08:24  alex
  * - "Passive-Mode" implementiert: kein Auto-Conect zu anderen Servern.
  * - NGIRCd_DebugLevel wird (fuer VERSION-Befehl) ermittelt.
@@ -274,6 +296,8 @@ GLOBAL INT main( INT argc, CONST CHAR *argv[] )
                                printf( PACKAGE": Can't fork: %s!\nFatal error, exiting now ...", strerror( errno ));
                                exit( 1 );
                        }
+
+                       /* Child-Prozess initialisieren */
                        setsid( );
                        chdir( "/" );
                }
@@ -287,8 +311,6 @@ GLOBAL INT main( INT argc, CONST CHAR *argv[] )
                /* Module initialisieren */
                Log_Init( );
                Conf_Init( );
-               Parse_Init( );
-               IRC_Init( );
                Channel_Init( );
                Client_Init( );
                Conn_Init( );
@@ -310,11 +332,15 @@ GLOBAL INT main( INT argc, CONST CHAR *argv[] )
                Conn_Exit( );
                Client_Exit( );
                Channel_Exit( );
-               IRC_Exit( );
-               Parse_Exit( );
                Conf_Exit( );
                Log_Exit( );
        }
+
+#ifndef DEBUG
+       /* aufraeumen */
+       if( unlink( ERROR_FILE ) != 0 ) Log( LOG_ERR, "Can't delete \""ERROR_FILE"\": %s", strerror( errno ));
+#endif
+
        return 0;
 } /* main */
 
@@ -363,12 +389,20 @@ 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;
-       saction.sa_flags = SA_RESTART;
+#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 );
@@ -380,6 +414,19 @@ LOCAL VOID Initialize_Signal_Handler( VOID )
        /* 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 */
 
 
@@ -450,6 +497,11 @@ LOCAL VOID Show_Version( VOID )
 
 LOCAL VOID Show_Help( VOID )
 {
+       puts( "Compile-time defaults:\n" );
+       puts( "  - configuration: "CONFIG_FILE );
+       puts( "  - MOTD file: "MOTD_FILE );
+       puts( "  - server error log: "ERROR_FILE"\n" );
+       puts( "Run-time options:\n" );
 #ifdef DEBUG
        puts( "  -d, --debug       log extra debug messages" );
 #endif