(addr string, resolver *Resolver, mapper *ResolverEnhancer)
| 48 | } |
| 49 | |
| 50 | func 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 | } |
no test coverage detected