Merge remote-tracking branch 'clash/dev' into Meta
# Conflicts: # .github/workflows/docker.yml # dns/server.go # go.mod # go.sum # hub/executor/executor.go # test/go.mod # test/go.sum
This commit is contained in:
@ -43,15 +43,15 @@ func handlerWithContext(handler handler, msg *D.Msg) (*D.Msg, error) {
|
||||
return handler(ctx, msg)
|
||||
}
|
||||
|
||||
func (s *Server) SetHandler(handler handler) {
|
||||
func (s *Server) setHandler(handler handler) {
|
||||
s.handler = handler
|
||||
}
|
||||
|
||||
func ReCreateServer(addr string, resolver *Resolver, mapper *ResolverEnhancer) error {
|
||||
func ReCreateServer(addr string, resolver *Resolver, mapper *ResolverEnhancer) {
|
||||
if addr == address && resolver != nil {
|
||||
handler := NewHandler(resolver, mapper)
|
||||
server.SetHandler(handler)
|
||||
return nil
|
||||
handler := newHandler(resolver, mapper)
|
||||
server.setHandler(handler)
|
||||
return
|
||||
}
|
||||
|
||||
if server.Server != nil {
|
||||
@ -60,33 +60,43 @@ func ReCreateServer(addr string, resolver *Resolver, mapper *ResolverEnhancer) e
|
||||
address = ""
|
||||
}
|
||||
|
||||
var err error
|
||||
defer func() {
|
||||
if err != nil {
|
||||
log.Errorln("Start DNS server error: %s", err.Error())
|
||||
}
|
||||
}()
|
||||
|
||||
_, port, err := net.SplitHostPort(addr)
|
||||
if port == "0" || port == "" || err != nil {
|
||||
return nil
|
||||
return
|
||||
}
|
||||
|
||||
udpAddr, err := net.ResolveUDPAddr("udp", addr)
|
||||
if err != nil {
|
||||
return err
|
||||
return
|
||||
}
|
||||
|
||||
p, err := net.ListenUDP("udp", udpAddr)
|
||||
if err != nil {
|
||||
return err
|
||||
return
|
||||
}
|
||||
|
||||
err = sockopt.UDPReuseaddr(p)
|
||||
if err != nil {
|
||||
log.Warnln("Failed to Reuse UDP Address: %s", err)
|
||||
|
||||
err = nil
|
||||
}
|
||||
|
||||
address = addr
|
||||
handler := NewHandler(resolver, mapper)
|
||||
handler := newHandler(resolver, mapper)
|
||||
server = &Server{handler: handler}
|
||||
server.Server = &D.Server{Addr: addr, PacketConn: p, Handler: server}
|
||||
|
||||
go func() {
|
||||
server.ActivateAndServe()
|
||||
}()
|
||||
return nil
|
||||
|
||||
log.Infoln("DNS server listening at: %s", p.LocalAddr().String())
|
||||
}
|
||||
|
Reference in New Issue
Block a user