@@ -233,8 +233,9 @@ func (d *RDial) DialTCP(network string, laddr, raddr *net.TCPAddr) (*net.TCPConn
233233 return DialTCP (d , network , laddr , raddr )
234234}
235235
236+ // DialTCP creates a net.TCPConn to raddr bound to laddr using dialer d; laddr may be nil.
236237func DialTCP (d RDialer , network string , laddr , raddr net.Addr ) (* net.TCPConn , error ) {
237- if c , err := d .DialBind (network , laddr . String ( ), raddr . String ( )); err != nil {
238+ if c , err := d .DialBind (network , addr2str ( laddr ), addr2str ( raddr )); err != nil {
238239 return nil , err
239240 } else if tc , ok := c .(* net.TCPConn ); ok {
240241 return tc , nil
@@ -254,8 +255,9 @@ func (d *RDial) DialUDP(network string, laddr, raddr *net.UDPAddr) (*net.UDPConn
254255 return DialUDP (d , network , laddr , raddr )
255256}
256257
258+ // DialUDP creates a net.UDPConn to raddr bound to laddr using dialer d; laddr may be left nil.
257259func DialUDP (d RDialer , network string , laddr , raddr net.Addr ) (* net.UDPConn , error ) {
258- if c , err := d .DialBind (network , laddr . String ( ), raddr . String ( )); err != nil {
260+ if c , err := d .DialBind (network , addr2str ( laddr ), addr2str ( raddr )); err != nil {
259261 return nil , err
260262 } else if uc , ok := c .(* net.UDPConn ); ok {
261263 return uc , nil
@@ -315,3 +317,10 @@ func (d *RDial) ProbeICMP(network, local string) (net.PacketConn, error) {
315317func clos (c io.Closer ) {
316318 core .Close (c )
317319}
320+
321+ func addr2str (a net.Addr ) string {
322+ if a == nil || core .IsNil (a ) {
323+ return ""
324+ }
325+ return a .String ()
326+ }
0 commit comments