aboutsummaryrefslogtreecommitdiffstats
path: root/src/conn.go
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2017-08-17 12:58:18 +0200
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2017-08-17 12:58:18 +0200
commit04640eb629f9c6a7bd4561f2a2f5b07195aa6009 (patch)
treec2d348c455aa4b50d77202ae268c7fe001bd274b /src/conn.go
parentDetects interface status on linux (diff)
downloadwireguard-go-04640eb629f9c6a7bd4561f2a2f5b07195aa6009.tar.xz
wireguard-go-04640eb629f9c6a7bd4561f2a2f5b07195aa6009.zip
Added missing IF index check
Diffstat (limited to 'src/conn.go')
-rw-r--r--src/conn.go20
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) {