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 */
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;
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 );
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,