mirror of
				https://git.zx2c4.com/wireguard-go
				synced 2025-11-01 04:12:47 +08:00 
			
		
		
		
	Close UDP connection when listen port changes
This commit is contained in:
		| @@ -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": | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Mathias Hall-Andersen
					Mathias Hall-Andersen