提交 94647ed8 作者: Jeromy

only fail interface setup if all addresses fail

License: MIT
Signed-off-by: 's avatarJeromy <jeromyj@gmail.com>
上级 724e6cb3
...@@ -114,7 +114,12 @@ func NewSwarm(ctx context.Context, listenAddrs []ma.Multiaddr, ...@@ -114,7 +114,12 @@ func NewSwarm(ctx context.Context, listenAddrs []ma.Multiaddr,
prom.MustRegisterOrGet(peersTotal) prom.MustRegisterOrGet(peersTotal)
s.Notify((*metricsNotifiee)(s)) s.Notify((*metricsNotifiee)(s))
return s, s.setupInterfaces(listenAddrs) err = s.setupInterfaces(listenAddrs)
if err != nil {
return nil, err
}
return s, nil
} }
func (s *Swarm) teardown() error { func (s *Swarm) teardown() error {
......
...@@ -16,28 +16,44 @@ import ( ...@@ -16,28 +16,44 @@ import (
// Open listeners and reuse-dialers for the given addresses // Open listeners and reuse-dialers for the given addresses
func (s *Swarm) setupInterfaces(addrs []ma.Multiaddr) error { func (s *Swarm) setupInterfaces(addrs []ma.Multiaddr) error {
for _, a := range addrs { errs := make([]error, len(addrs))
var succeeded int
for i, a := range addrs {
tpt := s.transportForAddr(a) tpt := s.transportForAddr(a)
if tpt == nil { if tpt == nil {
return fmt.Errorf("no transport for address: %s", a) errs[i] = fmt.Errorf("no transport for address: %s", a)
continue
} }
d, err := tpt.Dialer(a, transport.TimeoutOpt(DialTimeout), transport.ReusePorts) d, err := tpt.Dialer(a, transport.TimeoutOpt(DialTimeout), transport.ReusePorts)
if err != nil { if err != nil {
return err errs[i] = err
continue
} }
s.dialer.AddDialer(d) s.dialer.AddDialer(d)
list, err := tpt.Listen(a) list, err := tpt.Listen(a)
if err != nil { if err != nil {
return err errs[i] = err
continue
} }
err = s.addListener(list) err = s.addListener(list)
if err != nil { if err != nil {
return err errs[i] = err
continue
}
succeeded++
}
for i, e := range errs {
if e != nil {
log.Warning("listen on %s failed: %s", addrs[i], errs[i])
}
} }
if succeeded == 0 && len(addrs) > 0 {
return fmt.Errorf("failed to listen on any addresses: %s", errs)
} }
return nil return nil
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论