From 073b8c4ddcf34a01f1481dae961cf6076d8599f1 Mon Sep 17 00:00:00 2001 From: suirenjie Date: Fri, 29 Nov 2019 14:18:51 +0800 Subject: [PATCH] Added DialWithOptionsAndLocal method Some requirements may need to specify a local address, such as intranet penetration --- sess.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sess.go b/sess.go index 13a1a5c4..9e8afca2 100644 --- a/sess.go +++ b/sess.go @@ -1007,6 +1007,12 @@ func Dial(raddr string) (net.Conn, error) { return DialWithOptions(raddr, nil, 0 // // Check https://github.com/klauspost/reedsolomon for details func DialWithOptions(raddr string, block BlockCrypt, dataShards, parityShards int) (*UDPSession, error) { + return DialWithOptionsAndLocal(raddr, block, dataShards, parityShards, nil) +} + + +//Some requirements may need to specify a local address, such as intranet penetration +func DialWithOptionsAndLocal(raddr string, block BlockCrypt, dataShards, parityShards int, laddr *net.UDPAddr) (*UDPSession, error) { // network type detection udpaddr, err := net.ResolveUDPAddr("udp", raddr) if err != nil { @@ -1017,7 +1023,7 @@ func DialWithOptions(raddr string, block BlockCrypt, dataShards, parityShards in network = "udp" } - conn, err := net.ListenUDP(network, nil) + conn, err := net.ListenUDP(network, laddr) if err != nil { return nil, errors.WithStack(err) }