Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 2bb574c

Browse files
committedNov 3, 2015
add timeout opt to transport dialer creation
License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
1 parent 6de20f9 commit 2bb574c

File tree

5 files changed

+28
-8
lines changed

5 files changed

+28
-8
lines changed
 

‎p2p/net/conn/dial.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"fmt"
55
"math/rand"
66
"strings"
7-
"time"
87

98
ma "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
109
manet "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr-net"
@@ -19,7 +18,7 @@ import (
1918

2019
type WrapFunc func(transport.Conn) transport.Conn
2120

22-
func NewDialer(p peer.ID, pk ci.PrivKey, tout time.Duration, wrap WrapFunc) *Dialer {
21+
func NewDialer(p peer.ID, pk ci.PrivKey, wrap WrapFunc) *Dialer {
2322
return &Dialer{
2423
LocalPeer: p,
2524
PrivateKey: pk,

‎p2p/net/swarm/swarm.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func NewSwarm(ctx context.Context, listenAddrs []ma.Multiaddr,
103103
bwc: bwc,
104104
fdRateLimit: make(chan struct{}, concurrentFdDials),
105105
Filters: filter.NewFilters(),
106-
dialer: conn.NewDialer(local, peers.PrivKey(local), DialTimeout, wrap),
106+
dialer: conn.NewDialer(local, peers.PrivKey(local), wrap),
107107
}
108108

109109
// configure Swarm

‎p2p/net/swarm/swarm_listen.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func (s *Swarm) setupAddresses(addrs []ma.Multiaddr) error {
2222
return fmt.Errorf("no transport for address: %s", a)
2323
}
2424

25-
d, err := tpt.Dialer(a)
25+
d, err := tpt.Dialer(a, transport.TimeoutOpt(DialTimeout))
2626
if err != nil {
2727
return err
2828
}

‎p2p/net/transport/tcp.go

+21-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package transport
22

33
import (
4+
"fmt"
45
"net"
56
"sync"
7+
"time"
68

79
ma "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr"
810
manet "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-multiaddr-net"
@@ -26,16 +28,25 @@ func NewTCPTransport() *TcpTransport {
2628
}
2729
}
2830

29-
func (t *TcpTransport) Dialer(laddr ma.Multiaddr) (Dialer, error) {
31+
func (t *TcpTransport) Dialer(laddr ma.Multiaddr, opts ...DialOpt) (Dialer, error) {
3032
t.dlock.Lock()
3133
defer t.dlock.Unlock()
3234
s := laddr.String()
3335
d, found := t.dialers[s]
3436
if found {
3537
return d, nil
3638
}
37-
3839
var base manet.Dialer
40+
41+
for _, o := range opts {
42+
switch o := o.(type) {
43+
case TimeoutOpt:
44+
base.Timeout = o.(time.Duration)
45+
default:
46+
return nil, fmt.Errorf("unrecognized option: %#v", o)
47+
}
48+
}
49+
3950
tcpd, err := t.newTcpDialer(base, laddr)
4051
if err != nil {
4152
return nil, err
@@ -119,10 +130,17 @@ func (t *TcpTransport) newTcpDialer(base manet.Dialer, laddr ma.Multiaddr) (*tcp
119130
}, nil
120131
}
121132

133+
rd := reuseport.Dialer{
134+
D: net.Dialer{
135+
LocalAddr: la,
136+
Timeout: base.Timeout,
137+
},
138+
}
139+
122140
return &tcpDialer{
123141
doReuse: true,
124142
laddr: laddr,
125-
rd: reuseport.Dialer{D: net.Dialer{LocalAddr: la}},
143+
rd: rd,
126144
madialer: base,
127145
transport: t,
128146
}, nil

‎p2p/net/transport/transport.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ type Conn interface {
1717
}
1818

1919
type Transport interface {
20-
Dialer(laddr ma.Multiaddr) (Dialer, error)
20+
Dialer(laddr ma.Multiaddr, opts ...DialOpt) (Dialer, error)
2121
Listener(laddr ma.Multiaddr) (Listener, error)
2222
Matches(ma.Multiaddr) bool
2323
}
@@ -43,6 +43,9 @@ func (cw *connWrap) Transport() Transport {
4343
return cw.transport
4444
}
4545

46+
type DialOpt interface{}
47+
type TimeoutOpt interface{}
48+
4649
func IsTcpMultiaddr(a ma.Multiaddr) bool {
4750
p := a.Protocols()
4851
return len(p) == 2 && (p[0].Name == "ip4" || p[0].Name == "ip6") && p[1].Name == "tcp"

0 commit comments

Comments
 (0)
Please sign in to comment.