@cryptotaxi247 / kubo / commits / 94647ed88

only fail interface setup if all addresses fail

License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>

Jeromy committed Nov 9, 2015 at 00:14 UTC 94647ed8848ed91b1fce548829660194c8e9b804
2 files changed +27 -6
p2p/net/swarm/swarm.go
+6 -1
@@ -114,7 +114,12 @@ func NewSwarm(ctx context.Context, listenAddrs []ma.Multiaddr,
114 prom.MustRegisterOrGet(peersTotal)
115 s.Notify((*metricsNotifiee)(s))
116
117 - return s, s.setupInterfaces(listenAddrs)
117 + err = s.setupInterfaces(listenAddrs)
118 + if err != nil {
119 + return nil, err
120 + }
121 +
122 + return s, nil
123 }
124
125 func (s *Swarm) teardown() error {
p2p/net/swarm/swarm_listen.go
+21 -5
@@ -16,28 +16,44 @@ import (
16
17 // Open listeners and reuse-dialers for the given addresses
18 func (s *Swarm) setupInterfaces(addrs []ma.Multiaddr) error {
19 - for _, a := range addrs {
19 + errs := make([]error, len(addrs))
20 + var succeeded int
21 + for i, a := range addrs {
22 tpt := s.transportForAddr(a)
23 if tpt == nil {
22 - return fmt.Errorf("no transport for address: %s", a)
24 + errs[i] = fmt.Errorf("no transport for address: %s", a)
25 + continue
26 }
27
28 d, err := tpt.Dialer(a, transport.TimeoutOpt(DialTimeout), transport.ReusePorts)
29 if err != nil {
27 - return err
30 + errs[i] = err
31 + continue
32 }
33
34 s.dialer.AddDialer(d)
35
36 list, err := tpt.Listen(a)
37 if err != nil {
34 - return err
38 + errs[i] = err
39 + continue
40 }
41
42 err = s.addListener(list)
43 if err != nil {
39 - return err
44 + errs[i] = err
45 + continue
46 }
47 + succeeded++
48 + }
49 +
50 + for i, e := range errs {
51 + if e != nil {
52 + log.Warning("listen on %s failed: %s", addrs[i], errs[i])
53 + }
54 + }
55 + if succeeded == 0 && len(addrs) > 0 {
56 + return fmt.Errorf("failed to listen on any addresses: %s", errs)
57 }
58
59 return nil