mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-20 02:17:53 +00:00
4516760: (so) Intermittent SocketException: Transport endpoint is not connected (lnx)
Reviewed-by: sherman
This commit is contained in:
parent
3db64bc897
commit
90b1aee142
@ -541,7 +541,7 @@ Java_sun_nio_ch_Net_shutdown(JNIEnv *env, jclass cl, jobject fdo, jint jhow)
|
||||
{
|
||||
int how = (jhow == sun_nio_ch_Net_SHUT_RD) ? SHUT_RD :
|
||||
(jhow == sun_nio_ch_Net_SHUT_WR) ? SHUT_WR : SHUT_RDWR;
|
||||
if (shutdown(fdval(env, fdo), how) < 0)
|
||||
if ((shutdown(fdval(env, fdo), how) < 0) && (errno != ENOTCONN))
|
||||
handleSocketError(env, errno);
|
||||
}
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
|
||||
* Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -22,26 +22,65 @@
|
||||
*/
|
||||
|
||||
/* @test
|
||||
* @bug 4618960
|
||||
* @summary Test isInputShutdown
|
||||
* @library ..
|
||||
* @bug 4618960 4516760
|
||||
* @summary Test shutdownXXX and isInputShutdown
|
||||
*/
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.*;
|
||||
import java.nio.*;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.*;
|
||||
|
||||
public class Shutdown {
|
||||
|
||||
public static void main(String args[]) throws Exception {
|
||||
InetSocketAddress sa = new InetSocketAddress(
|
||||
InetAddress.getByName(TestUtil.HOST), 23);
|
||||
SocketChannel sc = SocketChannel.open(sa);
|
||||
boolean before = sc.socket().isInputShutdown();
|
||||
sc.socket().shutdownInput();
|
||||
boolean after = sc.socket().isInputShutdown();
|
||||
sc.close();
|
||||
if (before || !after)
|
||||
throw new Exception("Test failed");
|
||||
/**
|
||||
* Accept a connection, and close it immediately causing a hard reset.
|
||||
*/
|
||||
static void acceptAndReset(ServerSocketChannel ssc) throws IOException {
|
||||
SocketChannel peer = ssc.accept();
|
||||
try {
|
||||
peer.setOption(StandardSocketOption.SO_LINGER, 0);
|
||||
peer.configureBlocking(false);
|
||||
peer.write(ByteBuffer.wrap(new byte[128*1024]));
|
||||
} finally {
|
||||
peer.close();
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
ServerSocketChannel ssc = ServerSocketChannel.open()
|
||||
.bind(new InetSocketAddress(0));
|
||||
try {
|
||||
InetAddress lh = InetAddress.getLocalHost();
|
||||
int port = ((InetSocketAddress)(ssc.getLocalAddress())).getPort();
|
||||
SocketAddress remote = new InetSocketAddress(lh, port);
|
||||
|
||||
// Test SocketChannel shutdownXXX
|
||||
SocketChannel sc;
|
||||
sc = SocketChannel.open(remote);
|
||||
try {
|
||||
acceptAndReset(ssc);
|
||||
sc.shutdownInput();
|
||||
sc.shutdownOutput();
|
||||
} finally {
|
||||
sc.close();
|
||||
}
|
||||
|
||||
// Test Socket adapter shutdownXXX and isShutdownInput
|
||||
sc = SocketChannel.open(remote);
|
||||
try {
|
||||
acceptAndReset(ssc);
|
||||
boolean before = sc.socket().isInputShutdown();
|
||||
sc.socket().shutdownInput();
|
||||
boolean after = sc.socket().isInputShutdown();
|
||||
if (before || !after)
|
||||
throw new RuntimeException("Before and after test failed");
|
||||
sc.socket().shutdownOutput();
|
||||
} finally {
|
||||
sc.close();
|
||||
}
|
||||
} finally {
|
||||
ssc.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user