summaryrefslogtreecommitdiffhomepage
path: root/src/config.go
diff options
context:
space:
mode:
authorMathias Hall-Andersen <mathias@hall-andersen.dk>2017-07-23 16:21:08 +0200
committerMathias Hall-Andersen <mathias@hall-andersen.dk>2017-07-23 16:21:08 +0200
commitc3d9ae402d431b7697686dbaf021f879c8ccab36 (patch)
treec2f2deb382e93b0e8afa3414386df0ca337c44d3 /src/config.go
parent2ed9dac3a51b296819380758f4390b0032243c61 (diff)
Close UDP connection when listen port changes
Diffstat (limited to 'src/config.go')
-rw-r--r--src/config.go31
1 files changed, 14 insertions, 17 deletions
diff --git a/src/config.go b/src/config.go
index c889de0..9751a18 100644
--- a/src/config.go
+++ b/src/config.go
@@ -2,7 +2,6 @@ package main
import (
"bufio"
- "errors"
"fmt"
"io"
"net"
@@ -105,8 +104,6 @@ func ipcSetOperation(device *Device, socket *bufio.ReadWriter) *IPCError {
key := parts[0]
value := parts[1]
- fmt.Println(key, value)
-
switch key {
/* interface configuration */
@@ -125,16 +122,21 @@ func ipcSetOperation(device *Device, socket *bufio.ReadWriter) *IPCError {
}
case "listen_port":
- var port int
- _, err := fmt.Sscanf(value, "%d", &port)
- if err != nil || port > (1<<16) || port < 0 {
+ port, err := strconv.ParseUint(value, 10, 16)
+ if err != nil {
logError.Println("Failed to set listen_port:", err)
return &IPCError{Code: ipcErrorInvalidValue}
}
- device.net.mutex.Lock()
- device.net.addr.Port = port
- device.net.conn, err = net.ListenUDP("udp", device.net.addr)
- device.net.mutex.Unlock()
+ netc := &device.net
+ netc.mutex.Lock()
+ if netc.addr.Port != int(port) {
+ if netc.conn != nil {
+ netc.conn.Close()
+ }
+ netc.addr.Port = int(port)
+ netc.conn, err = net.ListenUDP("udp", netc.addr)
+ }
+ netc.mutex.Unlock()
if err != nil {
logError.Println("Failed to create UDP listener:", err)
return &IPCError{Code: ipcErrorInvalidValue}
@@ -151,15 +153,10 @@ func ipcSetOperation(device *Device, socket *bufio.ReadWriter) *IPCError {
return &IPCError{Code: ipcErrorInvalidValue}
}
device.mutex.RLock()
- found, ok := device.peers[pubKey]
+ peer, _ := device.peers[pubKey]
device.mutex.RUnlock()
- if ok {
- peer = found
- } else {
- peer = device.NewPeer(pubKey)
- }
if peer == nil {
- panic(errors.New("bug: failed to find / create peer"))
+ peer = device.NewPeer(pubKey)
}
case "replace_peers":