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.