diff options
author | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2017-08-17 12:58:18 +0200 |
---|---|---|
committer | Mathias Hall-Andersen <mathias@hall-andersen.dk> | 2017-08-17 12:58:18 +0200 |
commit | 04640eb629f9c6a7bd4561f2a2f5b07195aa6009 (patch) | |
tree | c2d348c455aa4b50d77202ae268c7fe001bd274b /src/conn.go | |
parent | 24f9394f6426aff16d94a76cc3994dba1a8705b1 (diff) |
Added missing IF index check
Diffstat (limited to 'src/conn.go')
-rw-r--r-- | src/conn.go | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/conn.go b/src/conn.go index f6472e9..e23b350 100644 --- a/src/conn.go +++ b/src/conn.go @@ -5,9 +5,9 @@ import ( ) func updateUDPConn(device *Device) error { - var err error netc := &device.net netc.mutex.Lock() + defer netc.mutex.Unlock() // close existing connection @@ -18,15 +18,23 @@ func updateUDPConn(device *Device) error { // open new connection if device.tun.isUp.Get() { + + // listen on new address + conn, err := net.ListenUDP("udp", netc.addr) - if err == nil { - netc.conn = conn - signalSend(device.signal.newUDPConn) + if err != nil { + return err } + + // retrieve port (may have been chosen by kernel) + + addr := conn.LocalAddr() + netc.conn = conn + netc.addr, _ = net.ResolveUDPAddr(addr.Network(), addr.String()) + signalSend(device.signal.newUDPConn) } - netc.mutex.Unlock() - return err + return nil } func closeUDPConn(device *Device) { |