chore: support skip the same config Listeners' Close and Listen

This commit is contained in:
wwqgtxx
2022-12-04 17:20:24 +08:00
parent e9d8dd09ac
commit 8144373725
9 changed files with 94 additions and 32 deletions

View File

@ -138,13 +138,25 @@ func GetGeneral() *config.General {
func updateListeners(listeners map[string]C.NewListener) {
tcpIn := tunnel.TCPIn()
udpIn := tunnel.UDPIn()
for _, listener := range tunnel.Listeners() {
_ = listener.Close()
skipNames := map[string]struct{}{}
for name, oldListener := range tunnel.Listeners() {
if newListener, ok := listeners[name]; ok {
if newListener.Config() == oldListener.Config() {
listeners[name] = oldListener
skipNames[name] = struct{}{}
continue
}
}
_ = oldListener.Close()
}
for _, listener := range listeners {
if err := listener.Listen(tcpIn, udpIn); err != nil {
log.Errorln("Listener %s listen err: %s", listener.Name(), err.Error())
for name, newListener := range listeners {
if _, ok := skipNames[name]; ok {
continue
}
if err := newListener.Listen(tcpIn, udpIn); err != nil {
log.Errorln("Listener %s listen err: %s", newListener.Name(), err.Error())
}
}
tunnel.UpdateListeners(listeners)