Close UDP connection when listen port changes

This commit is contained in:
Mathias Hall-Andersen 2017-07-23 16:21:08 +02:00
parent 2ed9dac3a5
commit c3d9ae402d
2 changed files with 14 additions and 23 deletions

View file

@ -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":

View file

@ -7,12 +7,6 @@ import (
"time"
)
/* TODO:
* This code can be improved by using fsnotify once:
* https://github.com/fsnotify/fsnotify/pull/205
* Is merged
*/
type UAPIListener struct {
listener net.Listener // unix socket listener
connNew chan net.Conn