>>>> "William" == William M Perry
<wmperry(a)aventail.com> writes:
William> I think we could pretty easily do _really_ asynchronous searches. We can
William> actually get the socket out of the LDAP library by using
William> #ifdef HAVE_LDAP_GET_OPTION
William> LBER_SOCKET fd;
William> if (ldap_get_option(ld,LDAP_OPT_DESC,&fd) != LDAP_SUCCESS)
William> {
William> /* Could not get the descriptor, bail */
William> return(-1);
William> }
William> #else
William> int fd = ld->ld_sb.sb_sd;
William> #endif
William> /* Somehow add the socket to the list of fd's the event loop is
William> ** waiting on. If the event loop sees the FD as getting data,
William> ** go into a do { } while (1) loop calling ldap_result() with a
William> ** 0-second timeout.
William> **
William> ** If we get a '0' back indicating a timeout, we must have
William> ** gotten only a partial result back, and there are no more records to be
William> ** read, so break out of the loop and handle the rest of the events.
William> **
William> ** Otherwise, we got a result back, call a callback function that
William> ** just gets a single LDAP record, and continue through the loop.
William> */
William> This would be really nice, I think. We'd just have to add an
William> 'event-stream-select-fd' that would be really close to the existing
William> event-stream-select-process
William> -Bill P.
Sounds nice but to tell the truth I've never experienced a situation where I
wished we had that feature so I really don't know if it's worth the effort
given the sensitivity of the code we need to plug into. But if you feel it's
important then definitely go for it, I am sure I will be happy to use it in the
end.
Oscar