If CLOSE_CONNECTION is a constant, then it should be declared 'static final'. But I think it can be removed altogether, along with shouldCloseConnection. Why not have the ConnectionCuller simply set running=false, so that Connection.run() exits naturally and removes itself from the connection cache?
The culler doesn't appear to remove the connection from the cache anyway. It should, so that new requests are not handed to a connection that is exiting. And to further safeguard against that, we can check, before calling connections.remove(address) that connections.get(address) == this, rather than keeping a noException boolean.
ConnectionCuller's constructor should set its thread name.
MAX_RETRIES should be named 'maxRetries' and should get its value from a config parameter named ipc.client.connect.max.retries.
Do we need a separate nocache config parameter, and code to support it? Shouldn't this be the same as simply setting maxidletime to 0? If so, let's get rid of isCachingDisabled. This would give only one mode of operation, greatly reducing the number of possible bugs.
The culler should sleep for a minimum time (say 1 second), so it doesn't enter a tight loop.
ipc.server.system.somaxconn should be named something like ipc.server.listen.queue.size