]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/conn.c
- Timeouts ausgehender Verbindungen werden besser erkannt (z.B. unter Cygwin).
[ngircd-alex.git] / src / ngircd / conn.c
index e60cde71b3d1e1fc0a5461366c7c1c2ba223f3d1..16dfbdb4e517eb569f55bd68176b1f54a2798eff 100644 (file)
@@ -9,11 +9,23 @@
  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
  * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
  *
  * 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.42 2002/03/02 00:23:32 alex Exp $
+ * $Id: conn.c,v 1.45 2002/03/02 02:44:01 alex Exp $
  *
  * connect.h: Verwaltung aller Netz-Verbindungen ("connections")
  *
  * $Log: conn.c,v $
  *
  * connect.h: Verwaltung aller Netz-Verbindungen ("connections")
  *
  * $Log: conn.c,v $
+ * Revision 1.45  2002/03/02 02:44:01  alex
+ * - Timeouts ausgehender Verbindungen werden besser erkannt (z.B. unter Cygwin).
+ * - Idle-Time der Hauptschleife [Conn_Handle()] erhoeht: weniger Last.
+ *
+ * Revision 1.44  2002/03/02 00:43:31  alex
+ * - bei abgebrochene ausgehende Server-Verbindungen wird der naechste Ver-
+ *   bindungsversuch in RECONNECT_DELAY Sekunden (3) unternommen und nicht
+ *   mehr "ConnectRetry" Sekunden gewartet.
+ *
+ * Revision 1.43  2002/03/02 00:29:11  alex
+ * - der Wert der Konfigurations-Variable "ConnectRetry" wird besser beachtet.
+ *
  * Revision 1.42  2002/03/02 00:23:32  alex
  * - ausgehende Verbindungen werden nun asyncron connectiert und blockieren
  *   nicht mehr den Server. Dadurch waren einige Aenderungen noetig.
  * Revision 1.42  2002/03/02 00:23:32  alex
  * - ausgehende Verbindungen werden nun asyncron connectiert und blockieren
  *   nicht mehr den Server. Dadurch waren einige Aenderungen noetig.
@@ -386,8 +398,8 @@ GLOBAL VOID Conn_Handler( INT Timeout )
                Check_Connections( );
 
                /* Timeout initialisieren */
                Check_Connections( );
 
                /* Timeout initialisieren */
-               tv.tv_sec = 0;
-               tv.tv_usec = 50000;
+               tv.tv_sec = 2;
+               tv.tv_usec = 0;
 
                /* noch volle Lese-Buffer suchen */
                for( i = 0; i < MAX_CONNECTIONS; i++ )
 
                /* noch volle Lese-Buffer suchen */
                for( i = 0; i < MAX_CONNECTIONS; i++ )
@@ -574,10 +586,13 @@ GLOBAL VOID Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN InformC
                free( My_Connections[Idx].res_stat );
        }
 
                free( My_Connections[Idx].res_stat );
        }
 
-       /* Bei Server-Verbindungen lasttry-Zeitpunkt auf "jetzt" setzen */
-       if( My_Connections[Idx].our_server >= 0 ) Conf_Server[My_Connections[Idx].our_server].lasttry = time( NULL );
+       /* Bei Server-Verbindungen lasttry-Zeitpunkt so setzen, dass
+        * der naechste Verbindungsversuch in RECONNECT_DELAY Sekunden
+        * gestartet wird */
+       if( My_Connections[Idx].our_server >= 0 ) Conf_Server[My_Connections[Idx].our_server].lasttry = time( NULL ) - Conf_ConnectRetry + RECONNECT_DELAY;
 
        FD_CLR( My_Connections[Idx].sock, &My_Sockets );
 
        FD_CLR( My_Connections[Idx].sock, &My_Sockets );
+       FD_CLR( My_Connections[Idx].sock, &My_Connects );
        My_Connections[Idx].sock = NONE;
 } /* Conn_Close */
 
        My_Connections[Idx].sock = NONE;
 } /* Conn_Close */
 
@@ -704,6 +719,10 @@ LOCAL BOOLEAN Handle_Write( CONN_ID Idx )
                        FD_CLR( My_Connections[Idx].sock, &My_Sockets );
                        close( My_Connections[Idx].sock );
                        Init_Conn_Struct( Idx );
                        FD_CLR( My_Connections[Idx].sock, &My_Sockets );
                        close( My_Connections[Idx].sock );
                        Init_Conn_Struct( Idx );
+
+                       /* Bei Server-Verbindungen lasttry-Zeitpunkt auf "jetzt" setzen */
+                       Conf_Server[My_Connections[Idx].our_server].lasttry = time( NULL );
+
                        return FALSE;
                }
                Log( LOG_DEBUG, "Connection %d with \"%s:%d\" established, now sendig PASS and SERVER ...", Idx, My_Connections[Idx].host, Conf_Server[My_Connections[Idx].our_server].port );
                        return FALSE;
                }
                Log( LOG_DEBUG, "Connection %d with \"%s:%d\" established, now sendig PASS and SERVER ...", Idx, My_Connections[Idx].host, Conf_Server[My_Connections[Idx].our_server].port );
@@ -957,7 +976,7 @@ LOCAL VOID Check_Connections( VOID )
                        {
                                /* Timeout */
                                Log( LOG_DEBUG, "Connection %d timed out ...", i );
                        {
                                /* Timeout */
                                Log( LOG_DEBUG, "Connection %d timed out ...", i );
-                               Conn_Close( i, NULL, "Timeout", TRUE );
+                               Conn_Close( i, NULL, "Timeout", FALSE );
                        }
                }
        }
                        }
                }
        }