检查 Solaris 中特定端口是否空闲
Check if a particular port is free in Solaris
我在 Solaris 11.3 SPARC 机器上遇到了一个奇怪的问题。我曾经使用 java 中的以下方法检查端口是否空闲(returns true if port is free else returns false)。
public static boolean isPortFree(int port) {
try {
new ServerSocket(port).close();
return true;
} catch (IOException e) {
System.out.println("Exception "+e.getMessage());
return false;
}
}
以上代码在除 Solaris 之外的所有 OS 中都可以正常工作。在 Solaris 机器上,当我使用端口 22 进行测试时,它按预期工作,但是当我使用另一个进程正在使用的端口 12345 进行测试时,它是 returning true,这是错误的行为。它应该抛出一个异常说 Address already in use and return false。
请给我建议即使在 Solaris 中也能工作的好主意
我已经找出问题所在,是 Solaris 机器中的 IPV4 和 IPV6 问题。 C 进程正在打开 IPV4 端口和 Java 的代码片段
ServerSocket(port).close();
正在检查 IPV6 端口。这就是原因,它不会在 Java 中抛出任何异常,即使端口 (IPV4) 已经在使用中。
我在 Solaris 11.3 SPARC 机器上遇到了一个奇怪的问题。我曾经使用 java 中的以下方法检查端口是否空闲(returns true if port is free else returns false)。
public static boolean isPortFree(int port) {
try {
new ServerSocket(port).close();
return true;
} catch (IOException e) {
System.out.println("Exception "+e.getMessage());
return false;
}
}
以上代码在除 Solaris 之外的所有 OS 中都可以正常工作。在 Solaris 机器上,当我使用端口 22 进行测试时,它按预期工作,但是当我使用另一个进程正在使用的端口 12345 进行测试时,它是 returning true,这是错误的行为。它应该抛出一个异常说 Address already in use and return false。 请给我建议即使在 Solaris 中也能工作的好主意
我已经找出问题所在,是 Solaris 机器中的 IPV4 和 IPV6 问题。 C 进程正在打开 IPV4 端口和 Java 的代码片段
ServerSocket(port).close();
正在检查 IPV6 端口。这就是原因,它不会在 Java 中抛出任何异常,即使端口 (IPV4) 已经在使用中。