X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Fconn.c;h=c1bc4c23540ff13e160c5ad7c07b1f732d2719ed;hb=e728bd2e1a5bcf69596b8c2a305cd6decbeaf42a;hp=714ebe6f34e611c45e36596c8e7b0278d6380cad;hpb=12e288c0625bde5aa5a56b6d813abbe2b22d2af5;p=ngircd.git diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c index 714ebe6f..c1bc4c23 100644 --- a/src/ngircd/conn.c +++ b/src/ngircd/conn.c @@ -17,7 +17,7 @@ #include "portab.h" #include "io.h" -static char UNUSED id[] = "$Id: conn.c,v 1.170 2005/08/15 23:02:40 alex Exp $"; +static char UNUSED id[] = "$Id: conn.c,v 1.171 2005/08/27 23:33:11 alex Exp $"; #include "imp.h" #include @@ -1078,6 +1078,7 @@ Read_Request( CONN_ID Idx ) int len; char readbuf[1024]; + CLIENT *c; assert( Idx > NONE ); assert( My_Connections[Idx].sock > NONE ); @@ -1129,13 +1130,21 @@ Read_Request( CONN_ID Idx ) } } - /* Connection-Statistik aktualisieren */ + /* Update connection statistics */ My_Connections[Idx].bytes_in += len; - /* Timestamp aktualisieren */ - My_Connections[Idx].lastdata = time( NULL ); - - Handle_Buffer( Idx ); + /* Update timestamp of last data received if this connection is + * registered as a user, server or service connection. Don't update + * otherwise, so users have at least Conf_PongTimeout seconds time to + * register with the IRC server -- see Check_Connections(). */ + c = Client_GetFromConn(Idx); + if (c && (Client_Type(c) == CLIENT_USER + || Client_Type(c) == CLIENT_SERVER + || Client_Type(c) == CLIENT_SERVICE)) + My_Connections[Idx].lastdata = time(NULL); + + /* Look at the data in the (read-) buffer of this connection */ + Handle_Buffer(Idx); } /* Read_Request */ @@ -1286,14 +1295,19 @@ Check_Connections( void ) } else { - /* connection is not fully established yet */ - if( My_Connections[i].lastdata < time( NULL ) - Conf_PingTimeout ) - { - /* Timeout */ + /* The connection is not fully established yet, so + * we don't do the PING-PONG game here but instead + * disconnect the client after "a short time" if it's + * still not registered. */ + + if (My_Connections[i].lastdata < + time(NULL) - Conf_PongTimeout) { #ifdef DEBUG - Log( LOG_DEBUG, "Connection %d timed out ...", i ); + Log(LOG_DEBUG, + "Unregistered connection %d timed out ...", + i); #endif - Conn_Close( i, NULL, "Timeout", false ); + Conn_Close(i, NULL, "Timeout", false); } } }