# HG changeset patch # User dcubed # Date 1512678409 18000 # Node ID ff1172e2c56adc1d0b2f41e16ca18a8f73eb9577 # Parent 8bb6cdfa44eb25b2a5b97081bfef7ad3bb53748e 8182307: Error during JRMP connection establishment Summary: Only use SO_REUSEADDR if we're using a fixed ServerSocket port. Reviewed-by: gthornbr, rriggs, sspitsyn diff -r 8bb6cdfa44eb -r ff1172e2c56a src/java.rmi/share/classes/sun/rmi/transport/tcp/TCPDirectSocketFactory.java --- a/src/java.rmi/share/classes/sun/rmi/transport/tcp/TCPDirectSocketFactory.java Thu Dec 07 10:21:13 2017 -0800 +++ b/src/java.rmi/share/classes/sun/rmi/transport/tcp/TCPDirectSocketFactory.java Thu Dec 07 15:26:49 2017 -0500 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package sun.rmi.transport.tcp; import java.io.IOException; +import java.net.InetSocketAddress; import java.net.Socket; import java.net.ServerSocket; import java.rmi.server.RMISocketFactory; @@ -42,6 +43,14 @@ public ServerSocket createServerSocket(int port) throws IOException { - return new ServerSocket(port); + ServerSocket ss = new ServerSocket(); + if (port == 0) { + // Only need SO_REUSEADDR if we're using a fixed port. If we + // start seeing EADDRINUSE due to collisions in free ports + // then we should retry the bind() a few times. + ss.setReuseAddress(false); + } + ss.bind(new InetSocketAddress(port)); + return ss; } }