@@ -233,8 +233,9 @@ func (d *RDial) DialTCP(network string, laddr, raddr *net.TCPAddr) (*net.TCPConn
233
233
return DialTCP (d , network , laddr , raddr )
234
234
}
235
235
236
+ // DialTCP creates a net.TCPConn to raddr bound to laddr using dialer d; laddr may be nil.
236
237
func 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 {
238
239
return nil , err
239
240
} else if tc , ok := c .(* net.TCPConn ); ok {
240
241
return tc , nil
@@ -254,8 +255,9 @@ func (d *RDial) DialUDP(network string, laddr, raddr *net.UDPAddr) (*net.UDPConn
254
255
return DialUDP (d , network , laddr , raddr )
255
256
}
256
257
258
+ // DialUDP creates a net.UDPConn to raddr bound to laddr using dialer d; laddr may be left nil.
257
259
func 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 {
259
261
return nil , err
260
262
} else if uc , ok := c .(* net.UDPConn ); ok {
261
263
return uc , nil
@@ -315,3 +317,10 @@ func (d *RDial) ProbeICMP(network, local string) (net.PacketConn, error) {
315
317
func clos (c io.Closer ) {
316
318
core .Close (c )
317
319
}
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