hints.ai_family = AF_UNSPEC;
snprintf(serv, sizeof serv, "%d", port);
- if (err = getaddrinfo(host, serv, &hints, &res)) {
+ if ( (err = getaddrinfo(host, serv, &hints, &res)) ) {
#ifdef NEW_LOGGING
LDAP_LOG(( "connection", LDAP_LEVEL_INFO,
"slap_get_listener_addresses: getaddrinfo failed: %s\n",
}
sap = *sal;
+ *sap = NULL;
for ( sai=res; sai; sai=sai->ai_next ) {
if( sai->ai_addr == NULL ) {
*sap = NULL;
break;
}
+
if (*sap != NULL) {
(*sap)->sa_family = sai->ai_family;
sap++;
+ *sap = NULL;
}
}
- *sap = NULL;
freeaddrinfo(res);
#else
struct in_addr in;
Listener *li;
LDAPURLDesc *lud;
unsigned short port;
- int err, addrlen;
+ int err, addrlen = 0;
struct sockaddr **sal, **psal;
int socktype = SOCK_STREAM; /* default to COTS */
)
{
int l;
- time_t last_idle_check = slap_get_time();
+ time_t last_idle_check = 0;
time( &starttime );
+ if ( global_idletimeout > 0 ) {
+ last_idle_check = slap_get_time();
+ }
for ( l = 0; slap_listeners[l] != NULL; l++ ) {
if ( slap_listeners[l]->sl_sd == AC_SOCKET_INVALID )
continue;
ber_socket_t nfds;
#define SLAPD_EBADF_LIMIT 16
int ebadf = 0;
-#if defined( EMFILE ) || defined( ENFILE )
int emfile = 0;
-#endif
#define SLAPD_IDLE_CHECK_LIMIT 4
- time_t now = slap_get_time();
+ time_t now;
fd_set readfds;
struct timeval zero;
struct timeval *tvp;
- if(
-#if defined( EMFILE ) || defined( ENFILE )
- emfile ||
-#endif
- ( global_idletimeout > 0 && difftime(
- last_idle_check+global_idletimeout/SLAPD_IDLE_CHECK_LIMIT,
- now ) < 0 ))
- {
- connections_timeout_idle(now);
+ if( emfile ) {
+ now = slap_get_time();
+ connections_timeout_idle( now );
+ }
+ else if ( global_idletimeout > 0 ) {
+ now = slap_get_time();
+ if ( difftime( last_idle_check+global_idletimeout/SLAPD_IDLE_CHECK_LIMIT, now ) < 0 ) {
+ connections_timeout_idle( now );
+ }
}
FD_ZERO( &writefds );
slap_ssf_t ssf = 0;
char *authid = NULL;
- char *dnsname;
+ char *dnsname = NULL;
char *peeraddr;
#ifdef LDAP_PF_LOCAL
char peername[MAXPATHLEN + sizeof("PATH=")];
if ( s == AC_SOCKET_INVALID ) {
int err = sock_errno();
- ldap_pvt_thread_yield();
-
-#if defined( EMFILE ) || defined( ENFILE )
#ifdef EMFILE
if( err == EMFILE ) {
emfile++;
#ifdef ENFILE
if( err == ENFILE ) {
emfile++;
- }
-#endif
- /* prevent busy loop */
-# ifdef HAVE_USLEEP
- if( emfile % 4 == 3 ) usleep( 250 );
-# else
- if( emfile % 8 == 7 ) sleep( 1 );
-# endif
- else continue;
+ } else
#endif
+ {
+ emfile=0;
+ }
+ if( emfile < 3 ) {
#ifdef NEW_LOGGING
- LDAP_LOG(( "connection", LDAP_LEVEL_ERR,
- "slapd_daemon_task: accept(%ld) failed errno=%d (%s)\n",
- (long)slap_listeners[l]->sl_sd, err, sock_errstr(err) ));
+ LDAP_LOG(( "connection", LDAP_LEVEL_ERR,
+ "slapd_daemon_task: accept(%ld) failed errno=%d (%s)\n",
+ (long)slap_listeners[l]->sl_sd, err, sock_errstr(err) ));
#else
- Debug( LDAP_DEBUG_ANY,
- "daemon: accept(%ld) failed errno=%d (%s)\n",
- (long) slap_listeners[l]->sl_sd, err,
- sock_errstr(err) );
+ Debug( LDAP_DEBUG_ANY,
+ "daemon: accept(%ld) failed errno=%d (%s)\n",
+ (long) slap_listeners[l]->sl_sd, err,
+ sock_errstr(err) );
#endif
+ } else {
+ /* prevent busy loop */
+# ifdef HAVE_USLEEP
+ if( emfile % 4 == 3 ) usleep( 250 );
+# else
+ if( emfile % 8 == 7 ) sleep( 1 );
+# endif
+ }
+ ldap_pvt_thread_yield();
continue;
}
emfile = 0;
if ( s >= dtblsize ) {
#ifdef NEW_LOGGING
LDAP_LOG(( "connection", LDAP_LEVEL_ERR,
- "slapd_daemon_task: %ld beyond descriptor table size %ld\n",
- (long)s, (long)dtblsize ));
+ "slapd_daemon_task: %ld beyond descriptor table size %ld\n",
+ (long)s, (long)dtblsize ));
#else
Debug( LDAP_DEBUG_ANY,
"daemon: %ld beyond descriptor table size %ld\n",
(long) s, (long) dtblsize, 0 );
#endif
+
slapd_close(s);
ldap_pvt_thread_yield();
continue;