From 9a3a1e366457eb43c569e717acdc7caa5084d5de Mon Sep 17 00:00:00 2001 From: ChsBuffer <33744752+chsbuffer@users.noreply.github.com> Date: Mon, 22 Mar 2021 21:59:39 +0800 Subject: [PATCH] Fix #589 GetProcessByUsedTcpPort multiple process --- Netch/Controllers/MainController.cs | 3 +-- Netch/Utils/PortHelper.cs | 8 +++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/Netch/Controllers/MainController.cs b/Netch/Controllers/MainController.cs index 1a20723d4b..c28969a1cf 100644 --- a/Netch/Controllers/MainController.cs +++ b/Netch/Controllers/MainController.cs @@ -191,8 +191,7 @@ public static void PortCheck(ushort port, string portName, PortType portType = P 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 f857cf1c15..459ecd881d 100644 --- a/Netch/Utils/PortHelper.cs +++ b/Netch/Utils/PortHelper.cs @@ -28,16 +28,14 @@ static PortHelper() } } - 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)