diff --git a/bundles/com.espressif.idf.core/src/com/espressif/idf/core/util/PortChecker.java b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/util/PortChecker.java index 593817713..da45fd49a 100644 --- a/bundles/com.espressif.idf.core/src/com/espressif/idf/core/util/PortChecker.java +++ b/bundles/com.espressif.idf.core/src/com/espressif/idf/core/util/PortChecker.java @@ -5,6 +5,7 @@ package com.espressif.idf.core.util; import java.io.IOException; +import java.net.ServerSocket; import java.net.Socket; import com.espressif.idf.core.logging.Logger; @@ -25,45 +26,16 @@ private PortChecker() public static boolean isPortAvailable(int port) { - int attempts = 0; - int retryCount = 3; - long retryDelayMillis = 200; - - while (attempts <= retryCount) + try (ServerSocket serverSocket = new ServerSocket(port)) { - try (Socket ignored = new Socket("localhost", port)) //$NON-NLS-1$ - { - // If the socket opens, the port is in use - return false; - } - catch (IOException e) - { - // Port is unavailable, retrying if there are attempts left - if (attempts == retryCount) - { - // After exhausting all retries, return false - Logger.log("Port " + port + " is not available after " + retryCount + " retries."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - return false; // Failure, port is still not available - } - - attempts++; - - // Log retry attempt - Logger.log("Attempt " + attempts + " failed, retrying in " + retryDelayMillis + " ms..."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - - try - { - Thread.sleep(retryDelayMillis); - } - catch (InterruptedException interruptedException) - { - Thread.currentThread().interrupt(); // Restore interrupt status - Logger.log("Port availability check interrupted."); //$NON-NLS-1$ - return false; // If interrupted, assume port unavailable and stop - } - } + serverSocket.setReuseAddress(true); + return true; + } + catch (Exception e) + { + Logger.log("Port: " + port + " is not available"); //$NON-NLS-1$ //$NON-NLS-2$ + return false; } - return true; //Fallback not reachable } /** diff --git a/bundles/com.espressif.idf.debug.gdbjtag.openocd/src/com/espressif/idf/debug/gdbjtag/openocd/Configuration.java b/bundles/com.espressif.idf.debug.gdbjtag.openocd/src/com/espressif/idf/debug/gdbjtag/openocd/Configuration.java index 9ecc95b11..9df696832 100644 --- a/bundles/com.espressif.idf.debug.gdbjtag.openocd/src/com/espressif/idf/debug/gdbjtag/openocd/Configuration.java +++ b/bundles/com.espressif.idf.debug.gdbjtag.openocd/src/com/espressif/idf/debug/gdbjtag/openocd/Configuration.java @@ -93,8 +93,7 @@ public static String[] getGdbServerCommandLineArray(ILaunchConfiguration configu lst.add(executable); int port = PortChecker - .getAvailablePort(configuration.getAttribute(ConfigurationAttributes.GDB_SERVER_GDB_PORT_NUMBER, - DefaultPreferences.GDB_SERVER_GDB_PORT_NUMBER_DEFAULT)); + .getAvailablePort(DefaultPreferences.GDB_SERVER_GDB_PORT_NUMBER_DEFAULT); lst.add("-c"); //$NON-NLS-1$ lst.add("gdb_port " + port); //$NON-NLS-1$ diff --git a/bundles/com.espressif.idf.debug.gdbjtag.openocd/src/com/espressif/idf/debug/gdbjtag/openocd/dsf/Launch.java b/bundles/com.espressif.idf.debug.gdbjtag.openocd/src/com/espressif/idf/debug/gdbjtag/openocd/dsf/Launch.java index 5b96137f2..6ddcf79de 100644 --- a/bundles/com.espressif.idf.debug.gdbjtag.openocd/src/com/espressif/idf/debug/gdbjtag/openocd/dsf/Launch.java +++ b/bundles/com.espressif.idf.debug.gdbjtag.openocd/src/com/espressif/idf/debug/gdbjtag/openocd/dsf/Launch.java @@ -149,9 +149,7 @@ protected void provideDefaults(ILaunchConfigurationWorkingCopy config) throws Co if (Configuration.getDoStartGdbServer(config)) { - int availableRemotePort = PortChecker.getAvailablePort(config.getAttribute(IGDBJtagConstants.ATTR_PORT_NUMBER, - DefaultPreferences.GDB_SERVER_GDB_PORT_NUMBER_DEFAULT)); - config.setAttribute(IGDBJtagConstants.ATTR_PORT_NUMBER, availableRemotePort); + config.setAttribute(IGDBJtagConstants.ATTR_PORT_NUMBER, DefaultPreferences.GDB_SERVER_GDB_PORT_NUMBER_DEFAULT); } config.setAttribute(DebugPlugin.ATTR_PROCESS_FACTORY_ID, CustomIdfProcessFactory.ID);