func NewBlockingPool(initCap, maxCap int, livetime time.Duration, factory Factory) (Pool, error) {
	if initCap < 0 || maxCap < 1 || initCap > maxCap {
		return nil, errors.New("invalid capacity settings")
	}

	newPool := &blockingPool{
		timeout: 3,
		conns: make(chan *WrappedConn, maxCap),
		factory: factory,
		livetime: livetime,
	}

	for i := 0; i < initCap; i++ {
		newPool.conns <- newPool.wrap(nil)
	}
	return newPool, nil
}
func NewBlockingPool(initCap, maxCap int, livetime time.Duration, factory Factory) (Pool, error) {
	if initCap < 0 || maxCap < 1 || initCap > maxCap {
		return nil, errors.New("invalid capacity settings")
	}

	newPool := &blockingPool{
		timeout: 3,
		conns: make(chan *WrappedConn, maxCap),
		factory: factory,
		livetime: livetime,
	}

	for i := 0; i < initCap; i++ {
		newPool.conns <- newPool.wrap(nil)
	}
	return newPool, nil
}
//Create a new blocking pool. As no new connections would be made when the pool is busy, 
//the number of connections of the pool is kept no more than initCap and maxCap does not 
//make sense but the api is reserved. The timeout to block Get() is set to 3 by default 
//concerning that it is better to be related with Get() method.