From b601ae1c51a233b6217da41b9b24d72498e27783 Mon Sep 17 00:00:00 2001 From: Ivan Date: Tue, 7 Oct 2025 21:30:27 -0500 Subject: [PATCH] Add read loop for UDP interface to handle incoming packets asynchronously. --- pkg/interfaces/udp.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/pkg/interfaces/udp.go b/pkg/interfaces/udp.go index 578b6eb..b803887 100644 --- a/pkg/interfaces/udp.go +++ b/pkg/interfaces/udp.go @@ -182,9 +182,37 @@ func (ui *UDPInterface) Start() error { } ui.conn = conn ui.Online = true + + // Start the read loop in a goroutine + go ui.readLoop() + return nil } +func (ui *UDPInterface) readLoop() { + buffer := make([]byte, common.DEFAULT_MTU) + for ui.IsOnline() && !ui.IsDetached() { + n, remoteAddr, err := ui.conn.ReadFromUDP(buffer) + if err != nil { + if ui.IsOnline() { + log.Printf("Error reading from UDP interface %s: %v", ui.Name, err) + } + return + } + + ui.mutex.Lock() + if ui.targetAddr == nil { + log.Printf("[DEBUG-7] UDP interface %s discovered peer %s", ui.Name, remoteAddr) + ui.targetAddr = remoteAddr + } + ui.mutex.Unlock() + + if ui.packetCallback != nil { + ui.packetCallback(buffer[:n], ui) + } + } +} + /* func (ui *UDPInterface) readLoop() { buffer := make([]byte, ui.MTU)