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

Re: connection management changes

Howard Chu writes:
> We listen for writable sockets if a write attempt returns incomplete. There's 
> a pair of mutexes and condition variables used to synch up here between the 
> writing threads and the listener thread. It's quite a lot of lock overhead. As 
> far as I can tell the main reason we do this is so that we can stop a writer 
> thread on demand instead of having it just block forever in write().

slapd seems to use non-blocking socket descriptors if it can, so it's
rather that write() to a full socket would otherwise do a busy loop
write()ing 0 bytes until there was room.

I wonder if slapd can use blocking sockets?  Then it could shutdown()
the descriptor to force a blocked write() call to terminate.  Unless
there are times when one would want to write something else to the
socket instead - some TLS magic, maybe...

connection_init() does seem to believe slapd can deal with blocking
sockets, since it tests for fcntl NONBLOCK failure but proceeds instead
of aborting the connection.