8196775: java/net/Socket/asyncClose/Race.java failed intermittently on Windows with ConnectException: Connection refused
Reviewed-by: dfuchs
This commit is contained in:
parent
64e4120a9d
commit
3b1fdecd45
@ -30,6 +30,7 @@
|
||||
import java.io.InputStream;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.net.ConnectException;
|
||||
import java.net.SocketException;
|
||||
import java.util.concurrent.Phaser;
|
||||
|
||||
@ -43,33 +44,37 @@ public class Race {
|
||||
final int port = ss.getLocalPort();
|
||||
final Phaser phaser = new Phaser(THREADS + 1);
|
||||
for (int i=0; i<100; i++) {
|
||||
final Socket s = new Socket("localhost", port);
|
||||
s.setSoLinger(false, 0);
|
||||
try (Socket sa = ss.accept()) {
|
||||
sa.setSoLinger(false, 0);
|
||||
final InputStream is = s.getInputStream();
|
||||
Thread[] threads = new Thread[THREADS];
|
||||
for (int j=0; j<THREADS; j++) {
|
||||
threads[j] = new Thread() {
|
||||
public void run() {
|
||||
try {
|
||||
phaser.arriveAndAwaitAdvance();
|
||||
while (is.read() != -1)
|
||||
Thread.sleep(50);
|
||||
} catch (Exception x) {
|
||||
if (!(x instanceof SocketException
|
||||
&& x.getMessage().equalsIgnoreCase("socket closed")))
|
||||
x.printStackTrace();
|
||||
// ok, expect Socket closed
|
||||
}
|
||||
}};
|
||||
try {
|
||||
final Socket s = new Socket("localhost", port);
|
||||
s.setSoLinger(false, 0);
|
||||
try (Socket sa = ss.accept()) {
|
||||
sa.setSoLinger(false, 0);
|
||||
final InputStream is = s.getInputStream();
|
||||
Thread[] threads = new Thread[THREADS];
|
||||
for (int j=0; j<THREADS; j++) {
|
||||
threads[j] = new Thread() {
|
||||
public void run() {
|
||||
try {
|
||||
phaser.arriveAndAwaitAdvance();
|
||||
while (is.read() != -1)
|
||||
Thread.sleep(50);
|
||||
} catch (Exception x) {
|
||||
if (!(x instanceof SocketException
|
||||
&& x.getMessage().equalsIgnoreCase("socket closed")))
|
||||
x.printStackTrace();
|
||||
// ok, expect Socket closed
|
||||
}
|
||||
}};
|
||||
}
|
||||
for (int j=0; j<100; j++)
|
||||
threads[j].start();
|
||||
phaser.arriveAndAwaitAdvance();
|
||||
s.close();
|
||||
for (int j=0; j<100; j++)
|
||||
threads[j].join();
|
||||
}
|
||||
for (int j=0; j<100; j++)
|
||||
threads[j].start();
|
||||
phaser.arriveAndAwaitAdvance();
|
||||
s.close();
|
||||
for (int j=0; j<100; j++)
|
||||
threads[j].join();
|
||||
} catch (ConnectException e) {
|
||||
System.err.println("Exception " + e + " Port: " + port);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user