honor network timeout even when doing full async

This commit is contained in:
Pierangelo Masarati 2007-01-07 22:05:33 +00:00
parent aa3c9bad3e
commit 9b5ea6a205
3 changed files with 15 additions and 4 deletions

View file

@ -243,6 +243,7 @@ typedef struct ldap_conn {
void *lconn_sasl_sockctx; /* for security layer */
#endif
int lconn_refcnt;
time_t lconn_created; /* time */
time_t lconn_lastused; /* time */
int lconn_rebind_inprogress; /* set if rebind in progress */
char ***lconn_rebind_queue; /* used if rebind in progress */

View file

@ -345,6 +345,8 @@ ldap_int_open_connection(
break;
}
conn->lconn_created = time( NULL );
#ifdef LDAP_DEBUG
ber_sockbuf_add_io( conn->lconn_sb, &ber_sockbuf_io_debug,
INT_MAX, (void *)"ldap_" );

View file

@ -223,10 +223,18 @@ ldap_send_server_request(
lc->lconn_status = LDAP_CONNST_CONNECTED;
break;
case -2:
/* caller will have to call again */
ld->ld_errno = LDAP_X_CONNECTING;
/* fallthru */
case -2: {
/* async only occurs if a network timeout is set */
struct timeval *tvp = ld->ld_options.ldo_tm_net;
assert( tvp != NULL );
/* honor network timeout */
if ( time( NULL ) - lc->lconn_created <= tvp->tv_sec )
{
/* caller will have to call again */
ld->ld_errno = LDAP_X_CONNECTING;
}
} /* fallthru */
default:
/* error */