I'm trying to run OpenLDAP on a Cortex-M7 processor, but to be a "good
citizen" my LDAP client code needs to connect asynchronously. (The code connects
Stripped down to the bare minimum (i.e. no error handling) for clarity here (the actual
code has tons of error handling), my asynchronous connection code looks like this:
ldap_set_option(pstContext->ld, LDAP_OPT_CONNECT_ASYNC, LDAP_OPT_ON); // Enable async
ldap_connect(ld); // Do the LDAP connection
As you'd expect, the next step is to test (asynchronously) whether the connection has
completed, but it can't see any OpenLDAP functionality to do this directly.
So here's what my test currently looks like:
* Determine whether a connection has yet connected
* @param[in] LDAP connection instance to test
* @retval 0 if connection has connected
* @retval -2 if connection is still waiting
* @return ...otherwise an unexpected problem was encountered
int ldap_connection_connected(LDAP * ld)
iRetVal = -99; // Default to "an unexpected problem was encountered"
if (ld->ld_defconn != NULL)
if (ld->ld_defconn->lconn_status == LDAP_CONNST_CONNECTED)
iRetVal = 0; // i.e. the connection has already connected, so exit early!
// Get the connection's sockbuffer
ber_sockbuf_ctrl( ld->ld_defconn->lconn_sb, LBER_SB_OPT_GET_FD, &sd );
// Check to see if a result has yet been received via this sockbuffer
iRetVal = ldap_int_check_async_open( ld, sd );
However, my bind code (i.e. that executes immediately after this) fails to connect to the
server after an asynchronous ldap_connect(), even though it works fine after a synchronous
ldap_connect(). Moreover, it looks to me (from the timings) as though my test for
asynchronous connection is signalling completion earlier than I'm expecting, so
I'm wondering if this is not waiting properly, e.g. if it's returning after the
very first message response when it should be waiting for a whole series of message
responses to arrive.
Am I missing some clever OpenLDAP trick for correctly detecting when asynchronous
ldap_connect() calls have fully connected? Thanks!
Show replies by date