You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							97 lines
						
					
					
						
							3.2 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							97 lines
						
					
					
						
							3.2 KiB
						
					
					
				| package net2 | |
| 
 | |
| import ( | |
| 	"net" | |
| 	"time" | |
| ) | |
| 
 | |
| type ConnectionOptions struct { | |
| 	// The maximum number of connections that can be active per host at any | |
| 	// given time (A non-positive value indicates the number of connections | |
| 	// is unbounded). | |
| 	MaxActiveConnections int32 | |
| 
 | |
| 	// The maximum number of idle connections per host that are kept alive by | |
| 	// the connection pool. | |
| 	MaxIdleConnections uint32 | |
| 
 | |
| 	// The maximum amount of time an idle connection can alive (if specified). | |
| 	MaxIdleTime *time.Duration | |
| 
 | |
| 	// This limits the number of concurrent Dial calls (there's no limit when | |
| 	// DialMaxConcurrency is non-positive). | |
| 	DialMaxConcurrency int | |
| 
 | |
| 	// Dial specifies the dial function for creating network connections. | |
| 	// If Dial is nil, net.DialTimeout is used, with timeout set to 1 second. | |
| 	Dial func(network string, address string) (net.Conn, error) | |
| 
 | |
| 	// This specifies the now time function.  When the function is non-nil, the | |
| 	// connection pool will use the specified function instead of time.Now to | |
| 	// generate the current time. | |
| 	NowFunc func() time.Time | |
| 
 | |
| 	// This specifies the timeout for any Read() operation. | |
| 	// Note that setting this to 0 (i.e. not setting it) will make | |
| 	// read operations block indefinitely. | |
| 	ReadTimeout time.Duration | |
| 
 | |
| 	// This specifies the timeout for any Write() operation. | |
| 	// Note that setting this to 0 (i.e. not setting it) will make | |
| 	// write operations block indefinitely. | |
| 	WriteTimeout time.Duration | |
| } | |
| 
 | |
| func (o ConnectionOptions) getCurrentTime() time.Time { | |
| 	if o.NowFunc == nil { | |
| 		return time.Now() | |
| 	} else { | |
| 		return o.NowFunc() | |
| 	} | |
| } | |
| 
 | |
| // A generic interface for managed connection pool.  All connection pool | |
| // implementations must be threadsafe. | |
| type ConnectionPool interface { | |
| 	// This returns the number of active connections that are on loan. | |
| 	NumActive() int32 | |
| 
 | |
| 	// This returns the highest number of active connections for the entire | |
| 	// lifetime of the pool. | |
| 	ActiveHighWaterMark() int32 | |
| 
 | |
| 	// This returns the number of idle connections that are in the pool. | |
| 	NumIdle() int | |
| 
 | |
| 	// This associates (network, address) to the connection pool; afterwhich, | |
| 	// the user can get connections to (network, address). | |
| 	Register(network string, address string) error | |
| 
 | |
| 	// This dissociate (network, address) from the connection pool; | |
| 	// afterwhich, the user can no longer get connections to | |
| 	// (network, address). | |
| 	Unregister(network string, address string) error | |
| 
 | |
| 	// This returns the list of registered (network, address) entries. | |
| 	ListRegistered() []NetworkAddress | |
| 
 | |
| 	// This gets an active connection from the connection pool.  The connection | |
| 	// will remain active until one of the following is called: | |
| 	//  1. conn.ReleaseConnection() | |
| 	//  2. conn.DiscardConnection() | |
| 	//  3. pool.Release(conn) | |
| 	//  4. pool.Discard(conn) | |
| 	Get(network string, address string) (ManagedConn, error) | |
| 
 | |
| 	// This releases an active connection back to the connection pool. | |
| 	Release(conn ManagedConn) error | |
| 
 | |
| 	// This discards an active connection from the connection pool. | |
| 	Discard(conn ManagedConn) error | |
| 
 | |
| 	// Enter the connection pool into lame duck mode.  The connection pool | |
| 	// will no longer return connections, and all idle connections are closed | |
| 	// immediately (including active connections that are released back to the | |
| 	// pool afterward). | |
| 	EnterLameDuckMode() | |
| }
 |