SocketIOPipe/IOPipe classes can select listening port by 2 ways: 1. caller specifies "-transport.address=dynamic" argument creating ArgumentHandler, and calls Binder.prepareForPipeConnection (actually see nsk.share.jpda.DebugeeBinder.prepareForPipeConnection()) before start listening. In the case prepareForPipeConnection creates socket and this socket later is used by IOPipe. 2. just start IOPipe listening. Then port is selected by calling nsk.share.jpda.DebugeeArgumentHandler.getTransportPort() which use findFreePort() method:
ServerSocket ss; try { ss = new ServerSocket(0); return String.valueOf(ss.getLocalPort()); }finally { ss.close(); } This method is known to be error prone (sometimes causes "address in use" error). The fix adds "-transport.address=dynamic" argument so IOPipe use 1st method. ------------- Commit messages: - Fixed "address in use" error Changes: https://git.openjdk.java.net/jdk/pull/4676/files Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=4676&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8269616 Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod Patch: https://git.openjdk.java.net/jdk/pull/4676.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/4676/head:pull/4676 PR: https://git.openjdk.java.net/jdk/pull/4676