]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/conn.c
- Dokumentation aktualisiert.
[ngircd-alex.git] / src / ngircd / conn.c
index 194c181b8e7c550ef137db3c0ca6dd956b7ac3a5..76b0822baff04471d138c062074892a4d08b3741 100644 (file)
@@ -9,7 +9,7 @@
  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
  * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
  *
- * $Id: conn.c,v 1.69 2002/09/02 19:03:09 alex Exp $
+ * $Id: conn.c,v 1.72 2002/09/07 22:34:44 alex Exp $
  *
  * connect.h: Verwaltung aller Netz-Verbindungen ("connections")
  */
@@ -220,8 +220,10 @@ Conn_NewListener( CONST UINT Port )
 GLOBAL VOID
 Conn_Handler( VOID )
 {
-       /* Aktive Verbindungen ueberwachen. Folgende Aktionen
-        * werden durchgefuehrt:
+       /* "Hauptschleife": Aktive Verbindungen ueberwachen. Folgende Aktionen
+        * werden dabei durchgefuehrt, bis der Server terminieren oder neu
+        * starten soll:
+        *
         *  - neue Verbindungen annehmen,
         *  - Server-Verbindungen aufbauen,
         *  - geschlossene Verbindungen loeschen,
@@ -242,10 +244,6 @@ Conn_Handler( VOID )
 
                Check_Connections( );
 
-               /* Timeout initialisieren */
-               tv.tv_sec = 1;
-               tv.tv_usec = 0;
-
                /* noch volle Lese-Buffer suchen */
                for( i = 0; i < MAX_CONNECTIONS; i++ )
                {
@@ -291,6 +289,7 @@ Conn_Handler( VOID )
                        {
                                /* Fuer die Verbindung ist eine "Penalty-Zeit" gesetzt */
                                FD_CLR( My_Connections[i].sock, &read_sockets );
+                               FD_CLR( My_Connections[i].sock, &write_sockets );
                        }
                }
                for( i = 0; i < Conn_MaxFD + 1; i++ )
@@ -302,9 +301,20 @@ Conn_Handler( VOID )
                        }
                }
 
+               /* Timeout initialisieren */
+               tv.tv_sec = 1;
+               tv.tv_usec = 0;
+               
                /* Auf Aktivitaet warten */
-               if( select( Conn_MaxFD + 1, &read_sockets, &write_sockets, NULL, &tv ) == -1 )
+               i = select( Conn_MaxFD + 1, &read_sockets, &write_sockets, NULL, &tv );
+               if( i == 0 )
+               {
+                       /* keine Veraenderung an den Sockets */
+                       continue;
+               }
+               if( i == -1 )
                {
+                       /* Fehler (z.B. Interrupt) */
                        if( errno != EINTR )
                        {
                                Log( LOG_EMERG, "select(): %s!", strerror( errno ));