- Vor dem Schliessen einer Verbindung wird versucht, den Buffer zu leeren.
authorAlexander Barton <alex@barton.de>
Thu, 28 Nov 2002 16:56:20 +0000 (16:56 +0000)
committerAlexander Barton <alex@barton.de>
Thu, 28 Nov 2002 16:56:20 +0000 (16:56 +0000)
ChangeLog
src/ngircd/conn.c

index 2e04eeb5bf3ea1654274bab0c05e259973bf25cb..3a628ac7485dfae0f54f7a1752f172f0417f7bc6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -50,6 +50,8 @@ ngIRCd CVS-HEAD
     miteinander ueber komprimiert Links kommunizieren.
   - Handling der Schreibpuffer umgestellt: Server sollte schneller arbeiten.
   - SQUIT wird nicht mehr doppelt an andere Server weitergeleitet.
+  - Der Server versucht nun vor dem Schliessen einer Verbindung Daten, die
+    noch im Schreibpuffer stehen, zu senden.
 
 ngIRCd 0.5.4, 24.11.2002
 
@@ -353,4 +355,4 @@ ngIRCd 0.0.1, 31.12.2001
 
 
 -- 
-$Id: ChangeLog,v 1.133 2002/11/28 14:32:18 alex Exp $
+$Id: ChangeLog,v 1.134 2002/11/28 16:56:20 alex Exp $
index 7ed61a3fdbe8e95a25c9dfe4e6398173bcc69aa6..bd7526975b98cf0fb73be939d52ce3f0efcbd600 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.97 2002/11/28 12:17:38 alex Exp $
+ * $Id: conn.c,v 1.98 2002/11/28 16:56:20 alex Exp $
  *
  * connect.h: Verwaltung aller Netz-Verbindungen ("connections")
  */
@@ -582,6 +582,10 @@ Conn_Close( CONN_ID Idx, CHAR *LogMsg, CHAR *FwdMsg, BOOLEAN InformClient )
                if( My_Connections[Idx].sock == NONE ) return;
        }
 
+       /* zunaechst versuchen, noch im Schreibpuffer vorhandene
+        * Daten auf den Socket zu schreiben ... */
+       Try_Write( Idx );
+
        if( close( My_Connections[Idx].sock ) != 0 )
        {
                Log( LOG_ERR, "Error closing connection %d (socket %d) with %s:%d - %s!", Idx, My_Connections[Idx].sock, My_Connections[Idx].host, ntohs( My_Connections[Idx].addr.sin_port), strerror( errno ));
@@ -864,15 +868,24 @@ Conn_InitZip( CONN_ID Idx )
 LOCAL BOOLEAN
 Try_Write( CONN_ID Idx )
 {
-       /* Versuchen, Daten aus dem Schreib-Puffer in den
-        * Socket zu schreiben. */
+       /* Versuchen, Daten aus dem Schreib-Puffer in den Socket zu
+        * schreiben. TRUE wird geliefert, wenn entweder keine Daten
+        * zum Versenden vorhanden sind oder erfolgreich bearbeitet
+        * werden konnten. Im Fehlerfall wird FALSE geliefert und
+        * die Verbindung geschlossen. */
 
        fd_set write_socket;
        struct timeval tv;
 
        assert( Idx > NONE );
        assert( My_Connections[Idx].sock > NONE );
-       assert( My_Connections[Idx].wdatalen > 0 );
+
+       /* sind ueberhaupt Daten vorhanden? */
+#ifdef USE_ZLIB
+       if(( ! My_Connections[Idx].wdatalen > 0 ) && ( ! My_Connections[Idx].zip.wdatalen )) return TRUE;
+#else
+       if( ! My_Connections[Idx].wdatalen > 0 ) return TRUE;
+#endif
 
        /* Timeout initialisieren: 0 Sekunden, also nicht blockieren */
        tv.tv_sec = 0; tv.tv_usec = 0;