code: func (p *ConnPool) reap() {
  	for {
  		// Sleep for a while
  		select {
  		case <-p.shutdownCh:
  			return
  		case <-time.After(time.Second):
  		}
  
  		// Reap all old conns
  		p.Lock()
  		var removed []string
  		now := time.Now()
  		for host, conn := range p.pool {
  			// Skip recently used connections
  			if now.Sub(conn.lastUsed) < p.MaxTime {
  				continue
  			}
  
  			// Skip connections with active streams
  			if atomic.LoadInt32(&conn.refCount) > 0 {
  				continue
  			}
  
  			// Close the conn
  			conn.Close()
  
  			// Remove from pool
  			removed = append(removed, host)
  		}
  		for _, host := range removed {
  			delete(p.pool, host)
  		}
  		p.Unlock()
  	}
  }
docs: // Reap is used to close conns open over maxTime