-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconn_pool.go
51 lines (43 loc) · 842 Bytes
/
conn_pool.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package gtcp
import (
"sync"
"sync/atomic"
)
var (
connMu sync.RWMutex
connP ConnPool
isConnPoolOpen uint32
)
// TCPConn pool
type ConnPool chan *TCPConn
// Get conn pool instance
func GetConnPool() ConnPool {
connMu.RLock()
defer connMu.RUnlock()
return connP
}
// Receive size to Open TCPConn pool
func OpenConnPool(size uint) {
if !IsConnPoolOpen() {
connMu.Lock()
connP = make(chan *TCPConn, size)
connMu.Unlock()
atomic.StoreUint32(&isConnPoolOpen, 1)
}
}
// Return true if TCPConn is open else false
func IsConnPoolOpen() bool {
return atomic.LoadUint32(&isConnPoolOpen) != 0
}
// Reopen TCPConn
func ReopenConnPool(size uint) {
DropConnPool()
OpenConnPool(size)
}
// Drop TCPConn
func DropConnPool() {
connMu.Lock()
connP = nil
connMu.Unlock()
atomic.StoreUint32(&isConnPoolOpen, 0)
}