Changed handling of timeouts for unregistered connections: don't reset
the counter if data is received and disconnect clients earlier.
This commit is contained in:
parent
12e288c062
commit
e728bd2e1a
|
@ -12,6 +12,8 @@
|
||||||
|
|
||||||
ngIRCd CVSHEAD
|
ngIRCd CVSHEAD
|
||||||
|
|
||||||
|
- Changed handling of timeouts for unregistered connections: don't reset
|
||||||
|
the counter if data is received and disconnect clients earlier.
|
||||||
- Fixed a format string bug in "connection statistics" messages to clients.
|
- Fixed a format string bug in "connection statistics" messages to clients.
|
||||||
- Removed unnecessary #define of "LOCAL", now use plain C "static" instead.
|
- Removed unnecessary #define of "LOCAL", now use plain C "static" instead.
|
||||||
- Channel topics are no longer limited to 127 characters: now the only limit
|
- Channel topics are no longer limited to 127 characters: now the only limit
|
||||||
|
@ -632,4 +634,4 @@ ngIRCd 0.0.1, 31.12.2001
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
$Id: ChangeLog,v 1.288 2005/08/27 22:59:06 alex Exp $
|
$Id: ChangeLog,v 1.289 2005/08/27 23:33:10 alex Exp $
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
#include "portab.h"
|
#include "portab.h"
|
||||||
#include "io.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 "imp.h"
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@ -1078,6 +1078,7 @@ Read_Request( CONN_ID Idx )
|
||||||
|
|
||||||
int len;
|
int len;
|
||||||
char readbuf[1024];
|
char readbuf[1024];
|
||||||
|
CLIENT *c;
|
||||||
|
|
||||||
assert( Idx > NONE );
|
assert( Idx > NONE );
|
||||||
assert( My_Connections[Idx].sock > NONE );
|
assert( My_Connections[Idx].sock > NONE );
|
||||||
|
@ -1129,12 +1130,20 @@ Read_Request( CONN_ID Idx )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Connection-Statistik aktualisieren */
|
/* Update connection statistics */
|
||||||
My_Connections[Idx].bytes_in += len;
|
My_Connections[Idx].bytes_in += len;
|
||||||
|
|
||||||
/* Timestamp aktualisieren */
|
/* 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);
|
My_Connections[Idx].lastdata = time(NULL);
|
||||||
|
|
||||||
|
/* Look at the data in the (read-) buffer of this connection */
|
||||||
Handle_Buffer(Idx);
|
Handle_Buffer(Idx);
|
||||||
} /* Read_Request */
|
} /* Read_Request */
|
||||||
|
|
||||||
|
@ -1286,12 +1295,17 @@ Check_Connections( void )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* connection is not fully established yet */
|
/* The connection is not fully established yet, so
|
||||||
if( My_Connections[i].lastdata < time( NULL ) - Conf_PingTimeout )
|
* we don't do the PING-PONG game here but instead
|
||||||
{
|
* disconnect the client after "a short time" if it's
|
||||||
/* Timeout */
|
* still not registered. */
|
||||||
|
|
||||||
|
if (My_Connections[i].lastdata <
|
||||||
|
time(NULL) - Conf_PongTimeout) {
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Log( LOG_DEBUG, "Connection %d timed out ...", i );
|
Log(LOG_DEBUG,
|
||||||
|
"Unregistered connection %d timed out ...",
|
||||||
|
i);
|
||||||
#endif
|
#endif
|
||||||
Conn_Close(i, NULL, "Timeout", false);
|
Conn_Close(i, NULL, "Timeout", false);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue