io.ray.serve.util.SocketUtil Maven / Gradle / Ivy
package io.ray.serve.util;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
public class SocketUtil {
public static final int PORT_RANGE_MAX = 65535;
public static int findAvailableTcpPort(int minPort) {
int portRange = PORT_RANGE_MAX - minPort;
int candidatePort = minPort;
int searchCounter = 0;
while (!isPortAvailable(candidatePort)) {
candidatePort++;
if (++searchCounter > portRange) {
throw new IllegalStateException(
String.format(
"Could not find an available tcp port in the range [%d, %d] after %d attempts.",
minPort, PORT_RANGE_MAX, searchCounter));
}
}
return candidatePort;
}
public static boolean isPortAvailable(int port) {
ServerSocket socket;
try {
socket = new ServerSocket();
} catch (IOException e) {
throw new IllegalStateException("Unable to create ServerSocket.", e);
}
try {
InetSocketAddress sa = new InetSocketAddress(port);
socket.bind(sa);
return true;
} catch (IOException ex) {
return false;
} finally {
try {
socket.close();
} catch (IOException ex) {
// ignore this exception for now
}
}
}
}