diff --git a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/gadp/GdbGadpDebuggerModelFactory.java b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/gadp/GdbGadpDebuggerModelFactory.java index 5fb2c8802d..14356d1e88 100644 --- a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/gadp/GdbGadpDebuggerModelFactory.java +++ b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/gadp/GdbGadpDebuggerModelFactory.java @@ -89,7 +89,7 @@ public class GdbGadpDebuggerModelFactory extends AbstractGadpLocalDebuggerModelF if (!existing && gdbCmdLine.size() >= 2) { cmd.addAll(gdbCmdLine.subList(1, gdbCmdLine.size())); } - cmd.add("--gadp-args"); + cmd.add("--agent-args"); cmd.addAll(List.of("-H", host)); cmd.addAll(List.of("-p", Integer.toString(port))); // Available ephemeral port if (!existing && gdbCmdLine.size() >= 1) { diff --git a/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/server/AbstractGadpServer.java b/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/server/AbstractGadpServer.java index 23699b84ac..3cd54cf8f5 100644 --- a/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/server/AbstractGadpServer.java +++ b/Ghidra/Debug/Debugger-gadp/src/main/java/ghidra/dbg/gadp/server/AbstractGadpServer.java @@ -61,9 +61,27 @@ public abstract class AbstractGadpServer @Override protected GadpClientHandler newHandler(AsynchronousSocketChannel sock) { + try { + // Accept only the first connection + closeServerSocket(); + } + catch (IOException e) { + Msg.error(this, "Could not close server socket", e); + } return new GadpClientHandler(this, sock); } + @Override + protected void removeHandler(GadpClientHandler handler) { + super.removeHandler(handler); + try { + terminate(); + } + catch (IOException e) { + Msg.error(this, "Could not terminate upon disconnect"); + } + } + protected AddressRange getAddressRange(Gadp.AddressRange range) { AddressSpace space = model.getAddressSpace(range.getSpace()); if (space == null) { diff --git a/Ghidra/Debug/Framework-AsyncComm/src/main/java/ghidra/comm/service/AbstractAsyncServer.java b/Ghidra/Debug/Framework-AsyncComm/src/main/java/ghidra/comm/service/AbstractAsyncServer.java index c88ff3a29c..04f2e649a3 100644 --- a/Ghidra/Debug/Framework-AsyncComm/src/main/java/ghidra/comm/service/AbstractAsyncServer.java +++ b/Ghidra/Debug/Framework-AsyncComm/src/main/java/ghidra/comm/service/AbstractAsyncServer.java @@ -129,6 +129,15 @@ public abstract class AbstractAsyncServer, H } } + /** + * Accept no more connections, but continue servicing existing connections + * + * @throws IOException if an I/O error occurs + */ + protected void closeServerSocket() throws IOException { + ssock.close(); + } + protected CompletableFuture allHandlers(Function> action) { AsyncFence fence = new AsyncFence(); for (H h : handlers) {