diff options
Diffstat (limited to 'server.go')
| -rw-r--r-- | server.go | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/server.go b/server.go new file mode 100644 index 0000000..9761e71 --- /dev/null +++ b/server.go @@ -0,0 +1,52 @@ +package main + +import ( + "fmt" + "github.com/miekg/dns" + //"strconv" + //"time" +) + +type server struct { + address string + port int +} + +func (s *server) Run() { + udpHandler := dns.NewServeMux() + udpHandler.HandleFunc(".", Handler.DoUDP) + + udpServer := &dns.Server{ + Addr: s.Addr(), + Net: "udp", + Handler: udpHandler, + UDPSize: 65535, + ReadTimeout: Config.UdpTimeout, + WriteTimeout: Config.UdpTimeout, + } + go s.start(udpServer) + + if !Config.NoTcp { + tcpHandler := dns.NewServeMux() + tcpHandler.HandleFunc(".", Handler.DoTCP) + + tcpServer := &dns.Server{ + Addr: s.Addr(), + Net: "tcp", + Handler: tcpHandler, + ReadTimeout: Config.TcpTimeout, + WriteTimeout: Config.TcpTimeout, + } + go s.start(tcpServer) + } +} + +func (s *Server) start(ds *dns.Server) { + if !Config.Quiet { + fmt.Println("Listening on ", ds.Net, ":", s.Addr()) + } + err := ds.ListenAndServe() + if err != nil { + fmt.Println("Failed to listen on ", ds.Net, ":", s.Addr(), ": ", err.Error()) + } +} |
