检查 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) 已经在使用中。