提交 9334c36e 编写于 作者: C chegar

7044870: java/nio/channels/DatagramChannel/SelectWhenRefused.java failed on SUSE Linux 10

Reviewed-by: alanb, chegar
Contributed-by: kurchi.subhra.hazra@oracle.com
上级 5cc05113
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
*/ */
/* @test /* @test
* @bug 6935563 * @bug 6935563 7044870
* @summary Test that Selector does not select an unconnected DatagramChannel when * @summary Test that Selector does not select an unconnected DatagramChannel when
* ICMP port unreachable received * ICMP port unreachable received
*/ */
...@@ -35,14 +35,15 @@ import java.io.IOException; ...@@ -35,14 +35,15 @@ import java.io.IOException;
public class SelectWhenRefused { public class SelectWhenRefused {
public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {
DatagramChannel dc = DatagramChannel.open().bind(new InetSocketAddress(0)); DatagramChannel dc1 = DatagramChannel.open().bind(new InetSocketAddress(0));
int port = dc.socket().getLocalPort(); int port = dc1.socket().getLocalPort();
dc.close();
// datagram sent to this address should be refused // datagram sent to this address should be refused
SocketAddress refuser = new InetSocketAddress(InetAddress.getLocalHost(), port); SocketAddress refuser = new InetSocketAddress(InetAddress.getLocalHost(), port);
dc = DatagramChannel.open().bind(new InetSocketAddress(0)); DatagramChannel dc = DatagramChannel.open().bind(new InetSocketAddress(0));
dc1.close();
Selector sel = Selector.open(); Selector sel = Selector.open();
try { try {
dc.configureBlocking(false); dc.configureBlocking(false);
...@@ -52,6 +53,10 @@ public class SelectWhenRefused { ...@@ -52,6 +53,10 @@ public class SelectWhenRefused {
sendDatagram(dc, refuser); sendDatagram(dc, refuser);
int n = sel.select(2000); int n = sel.select(2000);
if (n > 0) { if (n > 0) {
sel.selectedKeys().clear();
// BindException will be thrown if another service is using
// our expected refuser port, cannot run just exit.
DatagramChannel.open().bind(refuser).close();
throw new RuntimeException("Unexpected wakeup"); throw new RuntimeException("Unexpected wakeup");
} }
...@@ -80,6 +85,8 @@ public class SelectWhenRefused { ...@@ -80,6 +85,8 @@ public class SelectWhenRefused {
throw new RuntimeException("Unexpected wakeup after disconnect"); throw new RuntimeException("Unexpected wakeup after disconnect");
} }
} catch(BindException e) {
// Do nothing, some other test has used this port
} finally { } finally {
sel.close(); sel.close();
dc.close(); dc.close();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册