MCPcopy Create free account
hub / github.com/ClashDotNetFramework/experimental-clash / ReCreateServer

Function ReCreateServer

dns/server.go:50–92  ·  view source on GitHub ↗
(addr string, resolver *Resolver, mapper *ResolverEnhancer)

Source from the content-addressed store, hash-verified

48}
49
50func ReCreateServer(addr string, resolver *Resolver, mapper *ResolverEnhancer) error {
51 if addr == address && resolver != nil {
52 handler := newHandler(resolver, mapper)
53 server.setHandler(handler)
54 return nil
55 }
56
57 if server.Server != nil {
58 server.Shutdown()
59 server = &Server{}
60 address = ""
61 }
62
63 _, port, err := net.SplitHostPort(addr)
64 if port == "0" || port == "" || err != nil {
65 return nil
66 }
67
68 udpAddr, err := net.ResolveUDPAddr("udp", addr)
69 if err != nil {
70 return err
71 }
72
73 p, err := net.ListenUDP("udp", udpAddr)
74 if err != nil {
75 return err
76 }
77
78 err = sockopt.UDPReuseaddr(p)
79 if err != nil {
80 log.Warnln("Failed to Reuse UDP Address: %s", err)
81 }
82
83 address = addr
84 handler := newHandler(resolver, mapper)
85 server = &Server{handler: handler}
86 server.Server = &D.Server{Addr: addr, PacketConn: p, Handler: server}
87
88 go func() {
89 server.ActivateAndServe()
90 }()
91 return nil
92}

Callers 1

updateDNSFunction · 0.92

Calls 4

UDPReuseaddrFunction · 0.92
WarnlnFunction · 0.92
newHandlerFunction · 0.85
setHandlerMethod · 0.80

Tested by

no test coverage detected