Commit 2d720643 authored by Kurt Zeilenga's avatar Kurt Zeilenga
Browse files

experimental connections_timeout_idle() implementation.

parent b91a8372
......@@ -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 */
......
......@@ -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 );
......
......@@ -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,
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment