experimental connections_timeout_idle() implementation.

This commit is contained in:
Kurt Zeilenga 1999-06-19 03:20:01 +00:00
parent b91a837296
commit 2d720643be
3 changed files with 42 additions and 1 deletions

View File

@ -137,6 +137,35 @@ int connections_shutdown(void)
return 0;
}
/*
* Timeout idle connections.
*/
int connections_timeout_idle(time_t now)
{
int i = 0;
int connindex;
Connection* c;
ldap_pvt_thread_mutex_lock( &connections_mutex );
for( c = connection_first( &connindex );
c != NULL;
c = connection_next( c, &connindex ) )
{
if( difftime( c->c_activitytime+global_idletimeout, now) < 0 ) {
/* close it */
connection_closing( c );
connection_close( c );
i++;
}
}
connection_done( c );
ldap_pvt_thread_mutex_unlock( &connections_mutex );
return i;
}
static Connection* connection_get( ber_socket_t s )
{
/* connections_mutex should be locked by caller */

View File

@ -330,8 +330,13 @@ slapd_daemon_task(
ber_socket_t i;
int ns;
ber_socket_t nfds;
int ebadf = 0;
#define SLAPD_EBADF_LIMIT 10
int ebadf = 0;
#define SLAPD_IDLE_CHECK_LIMIT 4
time_t last_idle_check = slap_get_time();
time_t now;
fd_set readfds;
fd_set writefds;
@ -346,6 +351,12 @@ slapd_daemon_task(
char *client_name;
char *client_addr;
if( global_idletimeout > 0 &&
difftime( last_idle_check+global_idletimeout, now ) < 0 )
{
connections_timeout_idle(now);
}
FD_ZERO( &writefds );
FD_ZERO( &readfds );

View File

@ -128,6 +128,7 @@ int read_config LDAP_P(( char *fname ));
int connections_init LDAP_P((void));
int connections_shutdown LDAP_P((void));
int connections_destroy LDAP_P((void));
int connections_timeout_idle LDAP_P((time_t));
long connection_init LDAP_P((
ber_socket_t s,