package reuseport
import (
"context"
ma "github.com/multiformats/go-multiaddr"
manet "github.com/multiformats/go-multiaddr/net"
)
func (t *Transport ) Dial (raddr ma .Multiaddr ) (manet .Conn , error ) {
return t .DialContext (context .Background (), raddr )
}
func (t *Transport ) DialContext (ctx context .Context , raddr ma .Multiaddr ) (manet .Conn , error ) {
network , addr , err := manet .DialArgs (raddr )
if err != nil {
return nil , err
}
var d *dialer
switch network {
case "tcp4" :
d = t .v4 .getDialer (network )
case "tcp6" :
d = t .v6 .getDialer (network )
default :
return nil , ErrWrongProto
}
conn , err := d .DialContext (ctx , network , addr )
if err != nil {
return nil , err
}
maconn , err := manet .WrapNetConn (conn )
if err != nil {
conn .Close ()
return nil , err
}
return maconn , nil
}
func (n *network ) getDialer (_ string ) *dialer {
n .mu .RLock ()
d := n .dialer
n .mu .RUnlock ()
if d == nil {
n .mu .Lock ()
defer n .mu .Unlock ()
if n .dialer == nil {
n .dialer = newDialer (n .listeners )
}
d = n .dialer
}
return d
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .