< prev index next >
src/java.rmi/share/classes/sun/rmi/transport/tcp/TCPDirectSocketFactory.java
Print this page
rev 48224 : 8182307: Error during JRMP connection establishment
Summary: Only use SO_REUSEADDR if we're using a fixed ServerSocket port.
Reviewed-by:
@@ -1,7 +1,7 @@
/*
- * 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
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -23,10 +23,11 @@
* questions.
*/
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;
/**
@@ -40,8 +41,16 @@
return new Socket(host, port);
}
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;
}
}
< prev index next >