[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: tcp timeoutcon patch for libldap



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).

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.

>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.

If you want a per network call timeout, I would
suggest introducing another option.
	LDAP_OPT_NETWORK_TIMEOUT

Enforcing both is a little tricky, but doable.

Note: The invalue of these options should be
"struct timeval *".