diff --git a/Netch/Controllers/MainController.cs b/Netch/Controllers/MainController.cs index 1a20723d..c28969a1 100644 --- a/Netch/Controllers/MainController.cs +++ b/Netch/Controllers/MainController.cs @@ -191,8 +191,7 @@ namespace Netch.Controllers public static void TryReleaseTcpPort(ushort port, string portName) { - Process? p; - if ((p = PortHelper.GetProcessByUsedTcpPort(port)) != null) + foreach (var p in PortHelper.GetProcessByUsedTcpPort(port)) { if (p.MainModule!.FileName.StartsWith(Global.NetchDir)) { diff --git a/Netch/Utils/PortHelper.cs b/Netch/Utils/PortHelper.cs index f857cf1c..459ecd88 100644 --- a/Netch/Utils/PortHelper.cs +++ b/Netch/Utils/PortHelper.cs @@ -28,16 +28,14 @@ namespace Netch.Utils } } - public static Process? GetProcessByUsedTcpPort(ushort port) + public static IEnumerable GetProcessByUsedTcpPort(ushort port) { if (port == 0) throw new ArgumentOutOfRangeException(); - var row = GetTcpTable2().SingleOrDefault(r => ntohs((ushort) r.dwLocalPort) == port); - if (row.dwOwningPid == 0) - return null; + var row = GetTcpTable2().Where(r => ntohs((ushort) r.dwLocalPort) == port); - return Process.GetProcessById((int) row.dwOwningPid); + return row.Select(r => Process.GetProcessById((int) r.dwOwningPid)); } private static void GetReservedPortRange(PortType portType, ref List targetList)