package swarm
import (
"time"
manet "github.com/multiformats/go-multiaddr/net"
ma "github.com/multiformats/go-multiaddr"
)
func (s *Swarm ) ListenAddresses () []ma .Multiaddr {
s .listeners .RLock ()
defer s .listeners .RUnlock ()
return s .listenAddressesNoLock ()
}
func (s *Swarm ) listenAddressesNoLock () []ma .Multiaddr {
addrs := make ([]ma .Multiaddr , 0 , len (s .listeners .m )+10 )
for l := range s .listeners .m {
addrs = append (addrs , l .Multiaddr ())
}
return addrs
}
const ifaceAddrsCacheDuration = 1 * time .Minute
func (s *Swarm ) InterfaceListenAddresses () ([]ma .Multiaddr , error ) {
s .listeners .RLock ()
ifaceListenAddres := s .listeners .ifaceListenAddres
isEOL := time .Now ().After (s .listeners .cacheEOL )
s .listeners .RUnlock ()
if !isEOL {
return append (ifaceListenAddres [:0 :0 ], ifaceListenAddres ...), nil
}
s .listeners .Lock ()
ifaceListenAddres = s .listeners .ifaceListenAddres
isEOL = time .Now ().After (s .listeners .cacheEOL )
if isEOL {
listenAddres := s .listenAddressesNoLock ()
if len (listenAddres ) > 0 {
var err error
ifaceListenAddres , err = manet .ResolveUnspecifiedAddresses (listenAddres , nil )
if err != nil {
s .listeners .Unlock ()
return nil , err
}
} else {
ifaceListenAddres = nil
}
s .listeners .ifaceListenAddres = ifaceListenAddres
s .listeners .cacheEOL = time .Now ().Add (ifaceAddrsCacheDuration )
}
s .listeners .Unlock ()
return append (ifaceListenAddres [:0 :0 ], ifaceListenAddres ...), nil
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .