dialer.go | 39 ++++++++++++++------------------------- socket.go | 5 +++-- test/unix_test.go | 2 +- diff --git a/dialer.go b/dialer.go index e8126bd664ce0200e51f386d764df4b7429d7417..d499af307281b8dc531224f261a8cf5b74395427 100644 --- a/dialer.go +++ b/dialer.go @@ -3,43 +3,32 @@ import ( "context" "net" - - "github.com/anacrolix/missinggo/perf" ) +// Dialers have the network locked in. type Dialer interface { Dial(_ context.Context, addr string) (net.Conn, error) DialerNetwork() string } -type NetDialer struct { +// An interface to ease wrapping dialers that explicitly include a network parameter. +type DialContexter interface { + DialContext(ctx context.Context, network, addr string) (net.Conn, error) +} + +// Used by wrappers of standard library network types. +var DefaultNetDialer = &net.Dialer{} + +// Adapts a DialContexter to the Dial interface in this package. +type NetworkDialer struct { Network string - Dialer net.Dialer + Dialer DialContexter } -func (me NetDialer) DialerNetwork() string { +func (me NetworkDialer) DialerNetwork() string { return me.Network } -func (me NetDialer) Dial(ctx context.Context, addr string) (_ net.Conn, err error) { - defer perf.ScopeTimerErr(&err)() +func (me NetworkDialer) Dial(ctx context.Context, addr string) (_ net.Conn, err error) { return me.Dialer.DialContext(ctx, me.Network, addr) } - -func (me NetDialer) LocalAddr() net.Addr { - return netDialerLocalAddr{me.Network, me.Dialer.LocalAddr} -} - -type netDialerLocalAddr struct { - network string - addr net.Addr -} - -func (me netDialerLocalAddr) Network() string { return me.network } - -func (me netDialerLocalAddr) String() string { - if me.addr == nil { - return "" - } - return me.addr.String() -} diff --git a/socket.go b/socket.go index ba2a091bd28987f982352718a8ef800a6962f50e..7313f632ef5264e973f1561fc62fc35230b5be8e 100644 --- a/socket.go +++ b/socket.go @@ -39,15 +39,16 @@ func listenTcp(network, address string) (s socket, err error) { l, err := net.Listen(network, address) return tcpSocket{ Listener: l, - NetDialer: NetDialer{ + NetworkDialer: NetworkDialer{ Network: network, + Dialer: DefaultNetDialer, }, }, err } type tcpSocket struct { net.Listener - NetDialer + NetworkDialer } func listenAll(networks []network, getHost func(string) string, port int, f firewallCallback) ([]socket, error) { diff --git a/test/unix_test.go b/test/unix_test.go index 1e877c0d5a9dd98c15dfb1daa756919fb955c7d2..d8a3ff9fb9c43d25cf949c84bafef7316e96625b 100644 --- a/test/unix_test.go +++ b/test/unix_test.go @@ -24,7 +24,7 @@ cfg.DisableTCP = true cfg.Debug = true }, Client: func(cl *torrent.Client) { - cl.AddDialer(torrent.NetDialer{Network: "unix"}) + cl.AddDialer(torrent.NetworkDialer{Network: "unix", Dialer: torrent.DefaultNetDialer}) l, err := net.Listen("unix", filepath.Join(t.TempDir(), "socket")) if err != nil { panic(err)