package node import "net" type LuxDnsServer struct { node *LuxNode stopChan chan bool } func NewLuxDnsServer(node *LuxNode) LuxDnsServer { return LuxDnsServer{ node: node, stopChan: make(chan bool), } } func (sv *LuxDnsServer) HandleRequest(req []byte) []byte { return nil } func (sv *LuxDnsServer) CreateFrontend(udpListen string) error { listenAddr, err := net.ResolveUDPAddr("udp", udpListen) if err != nil { return err } conn, err := net.ListenUDP("udp", listenAddr) if err != nil { return err } go func(sv *LuxDnsServer) { defer conn.Close() buf := make([]byte, 512) for { select { case <-sv.stopChan: return default: n, addr, err := conn.ReadFromUDP(buf) if err != nil { log.Debugf("failed to recv dns udp: %v\n", err) } res := sv.HandleRequest(buf[:n]) if len(res) > 0 { _, err := conn.WriteToUDP(res, addr) if err != nil { log.Debugf("failed to send dns reply: %v\n", err) } } } } }(sv) return nil } func (sv *LuxDnsServer) Stop() { sv.stopChan <- true }