8201474: (so) Socket adaptor connect(InetAddress, timeout) succeeds when connection fails
Reviewed-by: bpb
This commit is contained in:
parent
85fbf32898
commit
45fb75c85a
@ -1280,8 +1280,8 @@ class DatagramChannelImpl
|
||||
boolean polled = false;
|
||||
try {
|
||||
beginRead(blocking, false);
|
||||
int n = Net.poll(fd, Net.POLLIN, timeout);
|
||||
polled = (n > 0);
|
||||
int events = Net.poll(fd, Net.POLLIN, timeout);
|
||||
polled = (events != 0);
|
||||
} finally {
|
||||
endRead(blocking, polled);
|
||||
}
|
||||
|
@ -431,8 +431,8 @@ class ServerSocketChannelImpl
|
||||
boolean polled = false;
|
||||
try {
|
||||
begin(true);
|
||||
int n = Net.poll(fd, Net.POLLIN, timeout);
|
||||
polled = (n > 0);
|
||||
int events = Net.poll(fd, Net.POLLIN, timeout);
|
||||
polled = (events != 0);
|
||||
} finally {
|
||||
end(true, polled);
|
||||
}
|
||||
|
@ -951,8 +951,8 @@ class SocketChannelImpl
|
||||
boolean polled = false;
|
||||
try {
|
||||
beginRead(blocking);
|
||||
int n = Net.poll(fd, Net.POLLIN, timeout);
|
||||
polled = (n > 0);
|
||||
int events = Net.poll(fd, Net.POLLIN, timeout);
|
||||
polled = (events != 0);
|
||||
} finally {
|
||||
endRead(blocking, polled);
|
||||
}
|
||||
@ -977,10 +977,13 @@ class SocketChannelImpl
|
||||
boolean polled = false;
|
||||
try {
|
||||
beginFinishConnect(blocking);
|
||||
int n = Net.poll(fd, Net.POLLCONN, timeout);
|
||||
polled = (n > 0);
|
||||
int events = Net.poll(fd, Net.POLLCONN, timeout);
|
||||
polled = (events != 0);
|
||||
} finally {
|
||||
endFinishConnect(blocking, polled);
|
||||
// invoke endFinishConnect with completed = false so that
|
||||
// the state is not changed to ST_CONNECTED. The socket
|
||||
// adaptor will use finishConnect to finish.
|
||||
endFinishConnect(blocking, /*completed*/false);
|
||||
}
|
||||
return polled;
|
||||
} finally {
|
||||
|
@ -700,7 +700,8 @@ Java_sun_nio_ch_Net_poll(JNIEnv* env, jclass this, jobject fdo, jint events, jlo
|
||||
if (rv >= 0) {
|
||||
return pfd.revents;
|
||||
} else if (errno == EINTR) {
|
||||
return IOS_INTERRUPTED;
|
||||
// interrupted, no events to return
|
||||
return 0;
|
||||
} else {
|
||||
handleSocketError(env, errno);
|
||||
return IOS_THROWN;
|
||||
|
@ -22,7 +22,7 @@
|
||||
*/
|
||||
|
||||
/* @test
|
||||
* @bug 8156002
|
||||
* @bug 8156002 8201474
|
||||
* @summary Unit test for socket-channel adaptors
|
||||
* @library .. /test/lib
|
||||
* @build jdk.test.lib.Utils TestServers
|
||||
@ -37,18 +37,16 @@ import java.util.Arrays;
|
||||
|
||||
public class AdaptSocket {
|
||||
|
||||
static java.io.PrintStream out = System.out;
|
||||
static final java.io.PrintStream out = System.out;
|
||||
|
||||
static void test(TestServers.DayTimeServer dayTimeServer,
|
||||
static void test(TestServers.AbstractServer server,
|
||||
int timeout,
|
||||
boolean shouldTimeout)
|
||||
throws Exception
|
||||
{
|
||||
out.println();
|
||||
|
||||
InetSocketAddress isa
|
||||
= new InetSocketAddress(dayTimeServer.getAddress(),
|
||||
dayTimeServer.getPort());
|
||||
InetSocketAddress isa = new InetSocketAddress(server.getAddress(), server.getPort());
|
||||
SocketChannel sc = SocketChannel.open();
|
||||
Socket so = sc.socket();
|
||||
out.println("opened: " + so);
|
||||
@ -151,6 +149,30 @@ public class AdaptSocket {
|
||||
sc.close();
|
||||
}
|
||||
|
||||
static void testConnect(TestServers.AbstractServer server,
|
||||
int timeout,
|
||||
boolean shouldFail)
|
||||
throws Exception
|
||||
{
|
||||
SocketAddress sa = new InetSocketAddress(server.getAddress(), server.getPort());
|
||||
try (SocketChannel sc = SocketChannel.open()) {
|
||||
Socket s = sc.socket();
|
||||
try {
|
||||
if (timeout > 0) {
|
||||
s.connect(sa, timeout);
|
||||
} else {
|
||||
s.connect(sa);
|
||||
}
|
||||
if (shouldFail)
|
||||
throw new Exception("Connection should not be established");
|
||||
} catch (SocketException se) {
|
||||
if (!shouldFail)
|
||||
throw se;
|
||||
out.println("connect failed as expected: " + se);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
|
||||
try (TestServers.DayTimeServer dayTimeServer
|
||||
@ -177,5 +199,9 @@ public class AdaptSocket {
|
||||
= TestServers.NoResponseServer.startNewServer()) {
|
||||
testRead(noResponseServer, 10, true);
|
||||
}
|
||||
|
||||
TestServers.RefusingServer refuser = TestServers.RefusingServer.newRefusingServer();
|
||||
testConnect(refuser, 0, true);
|
||||
testConnect(refuser, 2000, true);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user