提交 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,
prom.MustRegisterOrGet(peersTotal)
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 {
......
......@@ -16,28 +16,44 @@ import (
// Open listeners and reuse-dialers for the given addresses
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)
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)
if err != nil {
return err
errs[i] = err
continue
}
s.dialer.AddDialer(d)
list, err := tpt.Listen(a)
if err != nil {
return err
errs[i] = err
continue
}
err = s.addListener(list)
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
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论