diff --git a/listener/sing_tun/server.go b/listener/sing_tun/server.go index 2dc6524ee3..09bf308c73 100644 --- a/listener/sing_tun/server.go +++ b/listener/sing_tun/server.go @@ -59,15 +59,23 @@ func CalculateInterfaceName(name string) (tunName string) { if err != nil { return } - var tunIndex int + tunIndex := 0 + indexSet := make(map[int]struct{}) for _, netInterface := range interfaces { if strings.HasPrefix(netInterface.Name, tunName) { index, parseErr := strconv.ParseInt(netInterface.Name[len(tunName):], 10, 16) if parseErr == nil { - tunIndex = int(index) + 1 + indexSet[int(index)] = struct{}{} } } } + for index := range indexSet { + if index == tunIndex { + tunIndex += 1 + } else { // indexSet already sorted and distinct, so this tunIndex nobody used + break + } + } tunName = F.ToString(tunName, tunIndex) return }