[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: tcp timeoutcon patch for libldap
"Kurt D. Zeilenga" wrote:
>
> At 02:59 PM 7/28/99 +0200, Lars Uffmann wrote:
> >we had massive problems with LDAP clients
> >blocking in the connect() system call.
> >So I wrote a patch against libldap/os-ip.c
> >which uses a non-blocking socket and select()
> >to avoid this.
>
> One of the issues we need to discuss is where
> handling of such I/O details is to be done. I
> see a bit of discontinuity between this change
> and recent TLS changes which moved some of the
> I/O option handling down into -llber.
>
> It's my opinion that I/O options should be
> set by -lldap (through LDAP_OPT_ mechanism) and
> passed down into -llber. -llber should be
> designed to work read/write from any I/O channel
> and that the caller should provide replacement
> routines (via hooks) if the default (read/write)
> are not appropriate (such as for TLS).
This is how netscape/mozilla does it.
The caller can supply function hooks via
ldap_set_option/LDAP_OPT_.
>
> Applications which use -llber directly (such as
> slapd) would have to manage the I/O options
> internally. This, of course, can be facilated
> by exposing a private interface to -lldap routines
> to do the nitty gritty.
>
> Anyways, as the TLS developers have obviously
> put some thought into the changes they introduced,
> I think it wise of them to examine your patch
> and offer comments on how best to proceed.
This sounds like we should look for an I/O
abstraction layer in llber. For my particular problem,
the posibility to provide a custom connect() function
via ldap_set_option, would have solved the problem.
>
> >To set/get the timeout, I used
> >the yet unused LDAP_OPT_TIMEOUT option flag
> >in ldap.h.
>
> The LDAP_OPT_TIMEOUT was meant to be used as a
> per LDAP API call timeout versus a per network call
> timeout. Implementation of such gets a little
> tricky.
Per API call timeouts is a differrent story ...
I think the API specs are quite inconsistent. For example,
there is no ldap_bind_st() api function.
But we solved this by writing a custom bind_st() function.
The only issue left is the bind call when following
referrals. Do you have any suggestions how to get arround this?
Maybee LDAP_OPT_TIMEOUT could be used here.
>
> If you want a per network call timeout, I would
> suggest introducing another option.
> LDAP_OPT_NETWORK_TIMEOUT
>
If you are willing to include my patch / provide the
timeoutconnect feature (either way) I would be happy
code this.
> Enforcing both is a little tricky, but doable.
>
> Note: The invalue of these options should be
> "struct timeval *".
I can correct this, if you think it is important.
regards, Lars