次のコードが「java.net.BindException: Address already in use: JVM_Bind」例外をスローしないのはなぜですか?
import java.net.InetSocketAddress;
import java.net.ServerSocket;
public class Test
{
public static void main(String[] args) throws Exception
{
try (ServerSocket socket1 = new ServerSocket();
ServerSocket socket2 = new ServerSocket();
ServerSocket socket3 = new ServerSocket())
{
int port = 10000;
socket1.setReuseAddress(false);
socket1.bind(new InetSocketAddress("0.0.0.0", port));
socket2.setReuseAddress(false);
socket2.bind(new InetSocketAddress("127.0.0.1", port));
socket3.setReuseAddress(false);
socket3.bind(new InetSocketAddress("127.0.0.2", port));
Thread.sleep(Long.MAX_VALUE);
}
}
}
その後「netstat」を実行すると、次のように表示されます。
C:\Users\Administrator>netstat -a -n | 検索文字列 10000 TCP 0.0.0.0:10000 0.0.0.0:0 リスニング TCP 127.0.0.1:10000 0.0.0.0:0 リスニング TCP 127.0.0.2:10000 0.0.0.0:0 リスニング TCP [::]:10000 [::]:0 リスニング
これを Windows Server 2008 R2 (64 ビット) で実行していますが、'ipconfig /all' には 1 つのネットワーク アダプター/インターフェイスしか表示されません (他のネットワーク アダプターは無効になっています)。しかし、他の一部のマシンでは、このプログラムは実際に予期される「java.net.BindException: Address already in use: JVM_Bind」をスローします。
何が起こっているのでしょうか?