Full_Name: Vernon Smith Version: 2.4.47 OS: Solaris 10 URL: ftp://ftp.openldap.org/incoming/ Submission from: (NULL) (2601:40d:4300:679a:c0c9:ced:d06f:39a4)
I have managed to upgrade to version 2.4.47 libldap libraries using the Linux OS and async connect mode works fine. But when I tried to upgrade to 2.4.47 using Solaris OS and use async connect mode, no connections could be established to the ldap server. The libldap code did not even send the ldap request to the ldap server. The ldap debug trace showed it just freeing the request and returned an unable to connect. I traced the issue to the routine ldap_int_flush_request which checks the sock_errno return code for EAGAIN but Solaris 10 returns ENOTCONN. This error code seems to mean the same thing as EAGAIN. I changed the code to test for either return code and the async connect works for both Linux and Solaris now. Here is may patch.
diff --git a/libraries/libldap/request.c b/libraries/libldap/request.c index 9355d7e..321b79f 100644 --- a/libraries/libldap/request.c +++ b/libraries/libldap/request.c @@ -184,7 +184,7 @@ ldap_int_flush_request(
LDAP_ASSERT_MUTEX_OWNER( &ld->ld_conn_mutex ); if ( ber_flush2( lc->lconn_sb, lr->lr_ber, LBER_FLUSH_FREE_NEVER ) != 0 ) { - if ( sock_errno() == EAGAIN ) { + if (( sock_errno() == EAGAIN ) || ( sock_errno() == ENOTCONN )) { /* need to continue write later */ lr->lr_status = LDAP_REQST_WRITING; ldap_mark_select_write( ld, lc->lconn_sb );
Thanks, Vern