Я пытаюсь проверить параметры TCP Keepalive в java, KEEPALIVE_IDLE_TIME, KEEPALIVE_PROBE_COUNT, KEEPALIVE_INTERVAL_TIME, которые устанавливаются и контролируются ОС.Эти три могут быть установлены через свойства потока. Но я не могу воспроизвести проблему мертвого соединения или незанятого сокета через отдельную программу (даже после использования thread.sleep).Вот фрагмент кода:
public Server(int port)
{
ThreadProperties.setProperty(ThreadProperties.KEEPALIVE_IDLE_TIME,"300" );
ThreadProperties.setProperty(ThreadProperties.KEEPALIVE_PROBE_COUNT, "5"); ThreadProperties.setProperty(ThreadProperties.KEEPALIVE_INTERVAL_TIME,"5");
try
{
server = new ServerSocket(port);
socket= new Socket("127.0.0.1",6001);
socket.setKeepAlive(true);
socket = server.accept();
try {
Thread.sleep(600000); //wait for 10 min
} catch (InterruptedException e) {
e.printStackTrace();
}
OutputStream outstream = socket.getOutputStream();
PrintWriter out = new PrintWriter(outstream);
String toSend = "String to send to server";
out.write(toSend );
socket.close();
}
catch(IOException i)
{
System.out.println(i);
}
}
В идеале сокет должен выйти из строя и завершиться с ошибкой на шаге out.write (toSend).Но он все еще в установленном состоянии и закрывается без каких-либо исключений.Как проверить этот случай использования в Java?