1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- package conntrack
- import (
- "io"
- "sync"
- "github.com/sagernet/sing/common"
- "github.com/sagernet/sing/common/x/list"
- )
- var (
- connAccess sync.RWMutex
- openConnection list.List[io.Closer]
- )
- func Count() int {
- if !Enabled {
- return 0
- }
- return openConnection.Len()
- }
- func List() []io.Closer {
- if !Enabled {
- return nil
- }
- connAccess.RLock()
- defer connAccess.RUnlock()
- connList := make([]io.Closer, 0, openConnection.Len())
- for element := openConnection.Front(); element != nil; element = element.Next() {
- connList = append(connList, element.Value)
- }
- return connList
- }
- func Close() {
- if !Enabled {
- return
- }
- connAccess.Lock()
- defer connAccess.Unlock()
- for element := openConnection.Front(); element != nil; element = element.Next() {
- common.Close(element.Value)
- element.Value = nil
- }
- openConnection.Init()
- }
|