feat: support accept TCP DNS request

Signed-off-by: Joseph Mory <morytyann@outlook.com>
This commit is contained in:
Joseph Mory 2025-01-15 16:48:44 +08:00
parent c7661d7765
commit 28d0840405
No known key found for this signature in database

View file

@ -13,8 +13,9 @@ import (
)
var (
address string
server = &Server{}
address string
tcpServer = &Server{}
udpServer = &Server{}
dnsDefaultTTL uint32 = 600
)
@ -51,13 +52,20 @@ func (s *Server) SetHandler(handler handler) {
func ReCreateServer(addr string, resolver *Resolver, mapper *ResolverEnhancer) {
if addr == address && resolver != nil {
handler := NewHandler(resolver, mapper)
server.SetHandler(handler)
tcpServer.SetHandler(handler)
udpServer.SetHandler(handler)
return
}
if server.Server != nil {
server.Shutdown()
server = &Server{}
if tcpServer.Server != nil {
tcpServer.Shutdown()
tcpServer = &Server{}
address = ""
}
if udpServer.Server != nil {
udpServer.Shutdown()
udpServer = &Server{}
address = ""
}
@ -77,6 +85,16 @@ func ReCreateServer(addr string, resolver *Resolver, mapper *ResolverEnhancer) {
return
}
tcpAddr, err := net.ResolveTCPAddr("tcp", addr)
if err != nil {
return
}
l, err := net.ListenTCP("tcp", tcpAddr)
if err != nil {
return
}
udpAddr, err := net.ResolveUDPAddr("udp", addr)
if err != nil {
return
@ -96,11 +114,19 @@ func ReCreateServer(addr string, resolver *Resolver, mapper *ResolverEnhancer) {
address = addr
handler := NewHandler(resolver, mapper)
server = &Server{handler: handler}
server.Server = &D.Server{Addr: addr, PacketConn: p, Handler: server}
tcpServer = &Server{handler: handler}
tcpServer.Server = &D.Server{Addr: addr, Listener: l, Handler: tcpServer}
udpServer = &Server{handler: handler}
udpServer.Server = &D.Server{Addr: addr, PacketConn: p, Handler: udpServer}
go func() {
server.ActivateAndServe()
tcpServer.ActivateAndServe()
}()
go func() {
udpServer.ActivateAndServe()
}()
log.Infoln("DNS server listening at: %s", p.LocalAddr().String())