Connection recovery, as well as load adaptability is executed by an special Method Object, called DBManagementMO. This object runs continuously, within its own thread, sleeping during configurable periods (reaper-delay parameter).
In each of it invocations it asks the connection pool for a connection for test. That connection has to be free in that moment. Then the connection is asked to check itself, which is done by trying to read data from the socket. If the read returns that there's no data, the connections is thought to be ok. Other values (this could be OS dependent) could mean that it lost its backend connection, so a recovery try would be started.