changeset 56392:37a077319427

8224603: Replace wildcard address with loopback or local host in tests - part 11 Summary: Fixes a batch of tests that were observed failing intermittently. Reviewed-by: chegar, vtewari
author dfuchs
date Fri, 24 May 2019 15:34:14 +0100
parents 703b2c04fc2c
children 11d9cd8d99f3
files test/jdk/com/sun/net/httpserver/SelCacheTest.java test/jdk/com/sun/net/httpserver/bugs/6725892/Test.java test/jdk/java/net/Authenticator/B4722333.java test/jdk/java/net/DatagramSocket/Send12k.java test/jdk/java/net/Socket/CloseAvailable.java test/jdk/java/net/Socket/setReuseAddress/Restart.java test/jdk/java/net/Socks/BadProxySelector.java test/jdk/java/net/Socks/SocksProxyVersion.java test/jdk/java/net/URLPermission/URLTest.java test/jdk/sun/net/www/http/ChunkedOutputStream/CheckError.java test/jdk/sun/net/www/httptest/TestHttpServer.java test/jdk/sun/net/www/protocol/https/ChunkedOutputStream.java test/jdk/sun/net/www/protocol/https/TestHttpsServer.java
diffstat 13 files changed, 523 insertions(+), 432 deletions(-) [+]
line wrap: on
line diff
--- a/test/jdk/com/sun/net/httpserver/SelCacheTest.java	Fri May 24 15:36:48 2019 +0200
+++ b/test/jdk/com/sun/net/httpserver/SelCacheTest.java	Fri May 24 15:34:14 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2019, Oracle and/or its affiliates. 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
@@ -27,11 +27,14 @@
  * @library /test/lib
  * @build jdk.test.lib.net.SimpleSSLContext
  * @run main/othervm -Dsun.net.httpserver.selCacheTimeout=2 SelCacheTest
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true
+                     -Dsun.net.httpserver.selCacheTimeout=2 SelCacheTest
  * @summary  Light weight HTTP server
  */
 
 import com.sun.net.httpserver.*;
 import jdk.test.lib.net.SimpleSSLContext;
+import jdk.test.lib.net.URIBuilder;
 
 import java.util.*;
 import java.util.concurrent.*;
@@ -49,92 +52,99 @@
 
     static SSLContext ctx;
 
-    public static void main (String[] args) throws Exception {
+    public static void main(String[] args) throws Exception {
         HttpServer s1 = null;
         HttpsServer s2 = null;
         ExecutorService executor=null;
+        InetAddress loopback = InetAddress.getLoopbackAddress();
         try {
-            String root = System.getProperty ("test.src")+ "/docs";
-            System.out.print ("Test1: ");
-            InetSocketAddress addr = new InetSocketAddress (0);
-            s1 = HttpServer.create (addr, 0);
+            String root = System.getProperty("test.src")+ "/docs";
+            System.out.print("Test1: ");
+            InetSocketAddress addr = new InetSocketAddress(loopback, 0);
+            s1 = HttpServer.create(addr, 0);
             if (s1 instanceof HttpsServer) {
-                throw new RuntimeException ("should not be httpsserver");
+                throw new RuntimeException("should not be httpsserver");
             }
-            s2 = HttpsServer.create (addr, 0);
-            HttpHandler h = new FileServerHandler (root);
-            HttpContext c1 = s1.createContext ("/test1", h);
-            HttpContext c2 = s2.createContext ("/test1", h);
+            s2 = HttpsServer.create(addr, 0);
+            HttpHandler h = new FileServerHandler(root);
+            HttpContext c1 = s1.createContext("/test1", h);
+            HttpContext c2 = s2.createContext("/test1", h);
             executor = Executors.newCachedThreadPool();
-            s1.setExecutor (executor);
-            s2.setExecutor (executor);
+            s1.setExecutor(executor);
+            s2.setExecutor(executor);
             ctx = new SimpleSSLContext().get();
-            s2.setHttpsConfigurator(new HttpsConfigurator (ctx));
+            s2.setHttpsConfigurator(new HttpsConfigurator(ctx));
             s1.start();
             s2.start();
 
             int port = s1.getAddress().getPort();
             int httpsport = s2.getAddress().getPort();
-            test (true, "http", root+"/test1", port, "smallfile.txt", 23);
-            test (true, "http", root+"/test1", port, "largefile.txt", 2730088);
-            test (true, "https", root+"/test1", httpsport, "smallfile.txt", 23);
-            test (true, "https", root+"/test1", httpsport, "largefile.txt", 2730088);
-            test (false, "http", root+"/test1", port, "smallfile.txt", 23);
-            test (false, "http", root+"/test1", port, "largefile.txt", 2730088);
-            test (false, "https", root+"/test1", httpsport, "smallfile.txt", 23);
-            test (false, "https", root+"/test1", httpsport, "largefile.txt", 2730088);
-            System.out.println ("OK");
+            test(true, "http", root+"/test1", loopback, port, "smallfile.txt", 23);
+            test(true, "http", root+"/test1", loopback, port, "largefile.txt", 2730088);
+            test(true, "https", root+"/test1", loopback, httpsport, "smallfile.txt", 23);
+            test(true, "https", root+"/test1", loopback, httpsport, "largefile.txt", 2730088);
+            test(false, "http", root+"/test1", loopback, port, "smallfile.txt", 23);
+            test(false, "http", root+"/test1", loopback, port, "largefile.txt", 2730088);
+            test(false, "https", root+"/test1", loopback, httpsport, "smallfile.txt", 23);
+            test(false, "https", root+"/test1", loopback, httpsport, "largefile.txt", 2730088);
+            System.out.println("OK");
         } finally {
             delay();
             s1.stop(2);
             s2.stop(2);
-            executor.shutdown ();
+            executor.shutdown();
         }
     }
 
-    static void test (boolean fixedLen, String protocol, String root, int port, String f, int size) throws Exception {
-        Thread.sleep (2000);
-        URL url = new URL (protocol+"://localhost:"+port+"/test1/"+f);
-        HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
+    static void test(boolean fixedLen, String protocol, String root,
+                     InetAddress address, int port, String f, int size) throws Exception {
+        Thread.sleep(2000);
+        URL url = URIBuilder.newBuilder()
+                  .scheme(protocol)
+                  .host(address)
+                  .port(port)
+                  .path("/test1/"+f)
+                  .toURL();
+        HttpURLConnection urlc = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
         if (urlc instanceof HttpsURLConnection) {
             HttpsURLConnection urlcs = (HttpsURLConnection) urlc;
-            urlcs.setHostnameVerifier (new HostnameVerifier () {
-                public boolean verify (String s, SSLSession s1) {
+            urlcs.setHostnameVerifier(new HostnameVerifier() {
+                public boolean verify(String s, SSLSession s1) {
                     return true;
                 }
             });
-            urlcs.setSSLSocketFactory (ctx.getSocketFactory());
+            urlcs.setSSLSocketFactory(ctx.getSocketFactory());
         }
         byte [] buf = new byte [4096];
 
         if (fixedLen) {
-            urlc.setRequestProperty ("XFixed", "yes");
+            urlc.setRequestProperty("XFixed", "yes");
         }
         InputStream is = urlc.getInputStream();
-        File temp = File.createTempFile ("Test1", null);
+        File temp = File.createTempFile("Test1", null);
         temp.deleteOnExit();
-        OutputStream fout = new BufferedOutputStream (new FileOutputStream(temp));
+        OutputStream fout = new BufferedOutputStream(new FileOutputStream(temp));
         int c, count = 0;
         while ((c=is.read(buf)) != -1) {
             count += c;
-            fout.write (buf, 0, c);
+            fout.write(buf, 0, c);
         }
         is.close();
         fout.close();
 
         if (count != size) {
-            throw new RuntimeException ("wrong amount of data returned");
+            throw new RuntimeException("wrong amount of data returned");
         }
         String orig = root + "/" + f;
-        compare (new File(orig), temp);
+        compare(new File(orig), temp);
         temp.delete();
     }
 
     /* compare the contents of the two files */
 
-    static void compare (File f1, File f2) throws IOException {
-        InputStream i1 = new BufferedInputStream (new FileInputStream(f1));
-        InputStream i2 = new BufferedInputStream (new FileInputStream(f2));
+    static void compare(File f1, File f2) throws IOException {
+        InputStream i1 = new BufferedInputStream(new FileInputStream(f1));
+        InputStream i2 = new BufferedInputStream(new FileInputStream(f2));
 
         int c1,c2;
 
@@ -142,11 +152,11 @@
             while ((c1=i1.read()) != -1) {
                 c2 = i2.read();
                 if (c1 != c2) {
-                    throw new RuntimeException ("file compare failed 1");
+                    throw new RuntimeException("file compare failed 1");
                 }
             }
             if (i2.read() != -1) {
-                throw new RuntimeException ("file compare failed 2");
+                throw new RuntimeException("file compare failed 2");
             }
         } finally {
             i1.close();
--- a/test/jdk/com/sun/net/httpserver/bugs/6725892/Test.java	Fri May 24 15:36:48 2019 +0200
+++ b/test/jdk/com/sun/net/httpserver/bugs/6725892/Test.java	Fri May 24 15:34:14 2019 +0100
@@ -26,6 +26,7 @@
  * @bug 6725892
  * @library /test/lib
  * @run main/othervm -Dsun.net.httpserver.maxReqTime=2 Test
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true -Dsun.net.httpserver.maxReqTime=2 Test
  * @summary
  */
 
@@ -49,36 +50,37 @@
 
     static class Handler implements HttpHandler {
 
-        public void handle (HttpExchange t)
+        public void handle(HttpExchange t)
             throws IOException
         {
             InputStream is = t.getRequestBody();
             InetSocketAddress rem = t.getRemoteAddress();
-            System.out.println ("Request from: " + rem);
+            System.out.println("Request from: " + rem);
             while (is.read () != -1) ;
             is.close();
             String requrl = t.getRequestURI().toString();
             OutputStream os = t.getResponseBody();
-            t.sendResponseHeaders (200, RESPONSE_BODY.length());
-            os.write (RESPONSE_BODY.getBytes());
+            t.sendResponseHeaders(200, RESPONSE_BODY.length());
+            os.write(RESPONSE_BODY.getBytes());
             t.close();
         }
     }
 
-    public static void main (String[] args) throws Exception {
+    public static void main(String[] args) throws Exception {
 
         ExecutorService exec = Executors.newCachedThreadPool();
 
+        InetAddress loopback = InetAddress.getLoopbackAddress();
         try {
-            InetSocketAddress addr = new InetSocketAddress (0);
-            s1 = HttpServer.create (addr, 100);
-            HttpHandler h = new Handler ();
-            HttpContext c1 = s1.createContext ("/", h);
+            InetSocketAddress addr = new InetSocketAddress(loopback, 0);
+            s1 = HttpServer.create(addr, 100);
+            HttpHandler h = new Handler();
+            HttpContext c1 = s1.createContext("/", h);
             s1.setExecutor(exec);
             s1.start();
 
             port = s1.getAddress().getPort();
-            System.out.println ("Server on port " + port);
+            System.out.println("Server on port " + port);
             url = URIBuilder.newBuilder()
                 .scheme("http")
                 .loopback()
@@ -89,14 +91,14 @@
             test1();
             test2();
             test3();
-            Thread.sleep (2000);
+            Thread.sleep(2000);
         } catch (Exception e) {
             e.printStackTrace();
-            System.out.println ("FAIL");
-            throw new RuntimeException ();
+            System.out.println("FAIL");
+            throw new RuntimeException();
         } finally {
             s1.stop(0);
-            System.out.println ("After Shutdown");
+            System.out.println("After Shutdown");
             exec.shutdown();
         }
     }
@@ -105,10 +107,10 @@
 
     static void test1() throws IOException {
         failed = false;
-        Socket s = new Socket (InetAddress.getLoopbackAddress(), port);
+        Socket s = new Socket(InetAddress.getLoopbackAddress(), port);
         InputStream is = s.getInputStream();
         // server should close connection after 2 seconds. We wait up to 10
-        s.setSoTimeout (10000);
+        s.setSoTimeout(10000);
         try {
             is.read();
         } catch (SocketTimeoutException e) {
@@ -116,36 +118,36 @@
         }
         s.close();
         if (failed) {
-            System.out.println ("test1: FAIL");
-            throw new RuntimeException ();
+            System.out.println("test1: FAIL");
+            throw new RuntimeException();
         } else {
-            System.out.println ("test1: OK");
+            System.out.println("test1: OK");
         }
     }
 
     // send request and don't read response. Check server closes connection
 
     static void test2() throws IOException {
-        HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
-        urlc.setReadTimeout (20 * 1000);
+        HttpURLConnection urlc = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
+        urlc.setReadTimeout(20 * 1000);
         InputStream is = urlc.getInputStream();
         // we won't read response and check if it times out
         // on server. If it timesout at client then there is a problem
         try {
-            Thread.sleep (10 * 1000);
+            Thread.sleep(10 * 1000);
             while (is.read() != -1) ;
         } catch (InterruptedException e) {
-            System.out.println (e);
-            System.out.println ("test2: FAIL");
-            throw new RuntimeException ("unexpected error");
+            System.out.println(e);
+            System.out.println("test2: FAIL");
+            throw new RuntimeException("unexpected error");
         } catch (SocketTimeoutException e1) {
-            System.out.println (e1);
-            System.out.println ("test2: FAIL");
-            throw new RuntimeException ("client timedout");
+            System.out.println(e1);
+            System.out.println("test2: FAIL");
+            throw new RuntimeException("client timedout");
         } finally {
             is.close();
         }
-        System.out.println ("test2: OK");
+        System.out.println("test2: OK");
     }
 
     // same as test2, but repeated with multiple connections
@@ -174,17 +176,17 @@
         }
 
         void fail(String msg) {
-            System.out.println (msg);
+            System.out.println(msg);
             failed = true;
         }
 
-        public void run () {
+        public void run() {
             HttpURLConnection urlc;
             InputStream is = null;
 
             try {
-                urlc = (HttpURLConnection) url.openConnection();
-                urlc.setReadTimeout (20 * 1000);
+                urlc = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
+                urlc.setReadTimeout(20 * 1000);
                 urlc.setDoOutput(true);
             } catch (IOException e) {
                 fail("Worker: failed to connect to server");
@@ -193,17 +195,17 @@
             }
             try {
                 OutputStream os = urlc.getOutputStream();
-                os.write ("foo".getBytes());
+                os.write("foo".getBytes());
                 if (mode == Mode.REQUEST) {
-                    Thread.sleep (3000);
+                    Thread.sleep(3000);
                 }
                 os.close();
                 is = urlc.getInputStream();
                 if (mode == Mode.RESPONSE) {
-                    Thread.sleep (3000);
+                    Thread.sleep(3000);
                 }
-                if (!checkResponse (is, RESPONSE_BODY)) {
-                    fail ("Worker: response");
+                if (!checkResponse(is, RESPONSE_BODY)) {
+                    fail("Worker: response");
                 }
                 is.close();
                 return;
@@ -214,11 +216,11 @@
             } catch (IOException e2) {
                 switch (mode) {
                   case NORMAL:
-                    fail ("Worker: " + e2.getMessage());
+                    fail("Worker: " + e2.getMessage());
                     break;
                   case RESPONSE:
                     if (is == null) {
-                        fail ("Worker: " + e2.getMessage());
+                        fail("Worker: " + e2.getMessage());
                         break;
                     }
                   // default: is ok
@@ -233,12 +235,12 @@
 
     static void test3() throws Exception {
         failed = false;
-        CountDownLatch l = new CountDownLatch (NUM*3);
+        CountDownLatch l = new CountDownLatch(NUM*3);
         Worker[] workers = new Worker[NUM*3];
         for (int i=0; i<NUM; i++) {
-            workers[i*3] = new Worker (l, Worker.Mode.NORMAL);
-            workers[i*3+1] = new Worker (l, Worker.Mode.REQUEST);
-            workers[i*3+2] = new Worker (l, Worker.Mode.RESPONSE);
+            workers[i*3] = new Worker(l, Worker.Mode.NORMAL);
+            workers[i*3+1] = new Worker(l, Worker.Mode.REQUEST);
+            workers[i*3+2] = new Worker(l, Worker.Mode.RESPONSE);
             workers[i*3].start();
             workers[i*3+1].start();
             workers[i*3+2].start();
@@ -248,26 +250,26 @@
             workers[i].join();
         }
         if (failed) {
-            throw new RuntimeException ("test3: failed");
+            throw new RuntimeException("test3: failed");
         }
-        System.out.println ("test3: OK");
+        System.out.println("test3: OK");
     }
 
-    static boolean checkResponse (InputStream is, String resp) {
+    static boolean checkResponse(InputStream is, String resp) {
         try {
             ByteArrayOutputStream bos = new ByteArrayOutputStream();
-            byte[] buf = new byte [64];
+            byte[] buf = new byte[64];
             int c;
             while ((c=is.read(buf)) != -1) {
-                bos.write (buf, 0, c);
+                bos.write(buf, 0, c);
             }
             bos.close();
             if (!bos.toString().equals(resp)) {
-                System.out.println ("Wrong response: " + bos.toString());
+                System.out.println("Wrong response: " + bos.toString());
                 return false;
             }
         } catch (IOException e) {
-            System.out.println (e);
+            System.out.println(e);
             return false;
         }
         return true;
--- a/test/jdk/java/net/Authenticator/B4722333.java	Fri May 24 15:36:48 2019 +0200
+++ b/test/jdk/java/net/Authenticator/B4722333.java	Fri May 24 15:34:14 2019 +0100
@@ -27,7 +27,7 @@
  * @modules java.base/sun.net.www
  * @library ../../../sun/net/www/httptest/
  * @build HttpCallback TestHttpServer ClosedChannelList HttpTransaction
- * @run main B4722333
+ * @run main/othervm B4722333
  * @summary JRE Proxy Authentication Not Working with ISA2000
  */
 
@@ -38,7 +38,7 @@
 
     static int count = 0;
 
-    static String [][] expected = {
+    static String[][] expected = {
        /* scheme  realm/prompt */
         {"basic", "foo"},
         {"basic", "foobar"},
@@ -47,44 +47,44 @@
         {"digest", "foobiz"}
     };
 
-    public void request (HttpTransaction req) {
+    public void request(HttpTransaction req) {
         try {
-            if (count % 2 == 1 ) {
-                req.setResponseEntityBody ("Hello .");
-                req.sendResponse (200, "Ok");
+            if (count % 2 == 1) {
+                req.setResponseEntityBody("Hello .");
+                req.sendResponse(200, "Ok");
                 req.orderlyClose();
             } else {
                 switch (count) {
                   case 0:
-                    req.addResponseHeader ("Connection", "close");
-                    req.addResponseHeader ("WWW-Authenticate", "Basic realm=\"foo\"");
-                    req.addResponseHeader ("WWW-Authenticate", "Foo realm=\"bar\"");
-                    req.sendResponse (401, "Unauthorized");
+                    req.addResponseHeader("Connection", "close");
+                    req.addResponseHeader("WWW-Authenticate", "Basic realm=\"foo\"");
+                    req.addResponseHeader("WWW-Authenticate", "Foo realm=\"bar\"");
+                    req.sendResponse(401, "Unauthorized");
                     req.orderlyClose();
                     break;
                   case 2:
-                    req.addResponseHeader ("Connection", "close");
-                    req.addResponseHeader ("WWW-Authenticate", "Basic realm=\"foobar\" Foo realm=\"bar\"");
-                    req.sendResponse (401, "Unauthorized");
+                    req.addResponseHeader("Connection", "close");
+                    req.addResponseHeader("WWW-Authenticate", "Basic realm=\"foobar\" Foo realm=\"bar\"");
+                    req.sendResponse(401, "Unauthorized");
                     break;
                   case 4:
-                    req.addResponseHeader ("Connection", "close");
-                    req.addResponseHeader ("WWW-Authenticate", "Digest realm=biz domain=/foo nonce=thisisanonce ");
-                    req.addResponseHeader ("WWW-Authenticate", "Basic realm=bizbar");
-                    req.sendResponse (401, "Unauthorized");
+                    req.addResponseHeader("Connection", "close");
+                    req.addResponseHeader("WWW-Authenticate", "Digest realm=biz domain=/foo nonce=thisisanonce ");
+                    req.addResponseHeader("WWW-Authenticate", "Basic realm=bizbar");
+                    req.sendResponse(401, "Unauthorized");
                     req.orderlyClose();
                     break;
                   case 6:
-                    req.addResponseHeader ("Connection", "close");
-                    req.addResponseHeader ("WWW-Authenticate", "Digest realm=\"bizbar\" domain=/biz nonce=\"hereisanonce\" Basic realm=\"foobar\" Foo realm=\"bar\"");
-                    req.sendResponse (401, "Unauthorized");
+                    req.addResponseHeader("Connection", "close");
+                    req.addResponseHeader("WWW-Authenticate", "Digest realm=\"bizbar\" domain=/biz nonce=\"hereisanonce\" Basic realm=\"foobar\" Foo realm=\"bar\"");
+                    req.sendResponse(401, "Unauthorized");
                     req.orderlyClose();
                     break;
                   case 8:
-                    req.addResponseHeader ("Connection", "close");
-                    req.addResponseHeader ("WWW-Authenticate", "Foo p1=1 p2=2 p3=3 p4=4 p5=5 p6=6 p7=7 p8=8 p9=10 Digest realm=foobiz domain=/foobiz nonce=newnonce");
-                    req.addResponseHeader ("WWW-Authenticate", "Basic realm=bizbar");
-                    req.sendResponse (401, "Unauthorized");
+                    req.addResponseHeader("Connection", "close");
+                    req.addResponseHeader("WWW-Authenticate", "Foo p1=1 p2=2 p3=3 p4=4 p5=5 p6=6 p7=7 p8=8 p9=10 Digest realm=foobiz domain=/foobiz nonce=newnonce");
+                    req.addResponseHeader("WWW-Authenticate", "Basic realm=bizbar");
+                    req.sendResponse(401, "Unauthorized");
                     req.orderlyClose();
                     break;
                 }
@@ -95,40 +95,40 @@
         }
     }
 
-    static void read (InputStream is) throws IOException {
+    static void read(InputStream is) throws IOException {
         int c;
-        System.out.println ("reading");
+        System.out.println("reading");
         while ((c=is.read()) != -1) {
-            System.out.write (c);
+            System.out.write(c);
         }
-        System.out.println ("");
-        System.out.println ("finished reading");
+        System.out.println("");
+        System.out.println("finished reading");
     }
 
 
-    static void client (String u) throws Exception {
+    static void client(String u) throws Exception {
         URL url = new URL (u);
-        System.out.println ("client opening connection to: " + u);
+        System.out.println("client opening connection to: " + u);
         URLConnection urlc = url.openConnection ();
         InputStream is = urlc.getInputStream ();
-        read (is);
+        read(is);
         is.close();
     }
 
     static TestHttpServer server;
 
-    public static void main (String[] args) throws Exception {
-        MyAuthenticator auth = new MyAuthenticator ();
-        Authenticator.setDefault (auth);
+    public static void main(String[] args) throws Exception {
+        MyAuthenticator auth = new MyAuthenticator();
+        Authenticator.setDefault(auth);
         try {
             InetAddress loopback = InetAddress.getLoopbackAddress();
-            server = new TestHttpServer (new B4722333(), 1, 10, loopback, 0);
-            System.out.println ("Server started: listening on port: " + server.getLocalPort());
-            client ("http://" + server.getAuthority() + "/d1/d2/d3/foo.html");
-            client ("http://" + server.getAuthority() + "/ASD/d3/x.html");
-            client ("http://" + server.getAuthority() + "/biz/d3/x.html");
-            client ("http://" + server.getAuthority() + "/bar/d3/x.html");
-            client ("http://" + server.getAuthority() + "/fuzz/d3/x.html");
+            server = new TestHttpServer(new B4722333(), 1, 10, loopback, 0);
+            System.out.println("Server started: listening on port: " + server.getLocalPort());
+            client("http://" + server.getAuthority() + "/d1/d2/d3/foo.html");
+            client("http://" + server.getAuthority() + "/ASD/d3/x.html");
+            client("http://" + server.getAuthority() + "/biz/d3/x.html");
+            client("http://" + server.getAuthority() + "/bar/d3/x.html");
+            client("http://" + server.getAuthority() + "/fuzz/d3/x.html");
         } catch (Exception e) {
             if (server != null) {
                 server.terminate();
@@ -137,43 +137,42 @@
         }
         int f = auth.getCount();
         if (f != expected.length) {
-            except ("Authenticator was called "+f+" times. Should be " + expected.length);
+            except("Authenticator was called "+f+" times. Should be " + expected.length);
         }
         server.terminate();
     }
 
-    public static void except (String s) {
+    public static void except(String s) {
         server.terminate();
-        throw new RuntimeException (s);
+        throw new RuntimeException(s);
     }
 
     static class MyAuthenticator extends Authenticator {
-        MyAuthenticator () {
-            super ();
+        MyAuthenticator() {
+            super();
         }
 
         int count = 0;
 
-        public PasswordAuthentication getPasswordAuthentication ()
-            {
-            System.out.println ("Auth called");
+        public PasswordAuthentication getPasswordAuthentication() {
+            System.out.println("Auth called");
             String scheme = getRequestingScheme();
-            System.out.println ("getRequestingScheme() returns " + scheme);
+            System.out.println("getRequestingScheme() returns " + scheme);
             String prompt = getRequestingPrompt();
-            System.out.println ("getRequestingPrompt() returns " + prompt);
+            System.out.println("getRequestingPrompt() returns " + prompt);
 
-            if (!scheme.equals (expected [count][0])) {
-                B4722333.except ("wrong scheme received, " + scheme + " expected " + expected [count][0]);
+            if (!scheme.equals(expected [count][0])) {
+                B4722333.except("wrong scheme received, " + scheme + " expected " + expected [count][0]);
             }
-            if (!prompt.equals (expected [count][1])) {
-                B4722333.except ("wrong realm received, " + prompt + " expected " + expected [count][1]);
+            if (!prompt.equals(expected [count][1])) {
+                B4722333.except("wrong realm received, " + prompt + " expected " + expected [count][1]);
             }
             count ++;
-            return (new PasswordAuthentication ("user", "passwordNotCheckedAnyway".toCharArray()));
+            return (new PasswordAuthentication("user", "passwordNotCheckedAnyway".toCharArray()));
         }
 
         public int getCount () {
-            return (count);
+            return count;
         }
     }
 
--- a/test/jdk/java/net/DatagramSocket/Send12k.java	Fri May 24 15:36:48 2019 +0200
+++ b/test/jdk/java/net/DatagramSocket/Send12k.java	Fri May 24 15:34:14 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, Oracle and/or its affiliates. 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
@@ -26,6 +26,8 @@
  * @bug 4094894
  * @summary On W95/W98 it's not possible to send a datagram >12k
  *          via the loopback address.
+ * @run main Send12k
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true Send12k
  */
 
 import java.net.*;
@@ -43,21 +45,24 @@
          } else {
              SEND_SIZE = 16 * 1024;
          }
+        InetAddress localHost = InetAddress.getLocalHost();
         DatagramSocket s1 = new DatagramSocket();
-        DatagramSocket s2 = new DatagramSocket();
+        DatagramSocket s2 = new DatagramSocket(0, localHost);
 
         byte b1[] = new byte[ SEND_SIZE ];
         DatagramPacket p1 = new DatagramPacket(b1, 0, b1.length,
-                                               InetAddress.getLocalHost(),
+                                               localHost,
                                                s2.getLocalPort());
         boolean sendOkay = true;
         try {
+            System.out.println("Sending to: [" + localHost + "]:" + s2.getLocalPort());
             s1.send(p1);
         } catch (IOException e) {
             /*
              * Prior to merlin a send of > 12k to loopback address
              * would fail silently.
              */
+            System.out.println("Sending failed: " + e);
             sendOkay = false;
         }
 
--- a/test/jdk/java/net/Socket/CloseAvailable.java	Fri May 24 15:36:48 2019 +0200
+++ b/test/jdk/java/net/Socket/CloseAvailable.java	Fri May 24 15:34:14 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2019, Oracle and/or its affiliates. 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
@@ -51,7 +51,7 @@
     static void testClose() throws IOException {
         boolean error = true;
         InetAddress addr = InetAddress.getLocalHost();
-        ServerSocket ss = new ServerSocket(0);
+        ServerSocket ss = new ServerSocket(0, 0, addr);
         int port = ss.getLocalPort();
 
         Thread t = new Thread(new Thread("Close-Available-1") {
--- a/test/jdk/java/net/Socket/setReuseAddress/Restart.java	Fri May 24 15:36:48 2019 +0200
+++ b/test/jdk/java/net/Socket/setReuseAddress/Restart.java	Fri May 24 15:34:14 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2019, Oracle and/or its affiliates. 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
@@ -51,12 +51,13 @@
     public static void main(String args[]) throws Exception {
         IPSupport.throwSkippedExceptionIfNonOperational();
 
-        ServerSocket ss = new ServerSocket(0);
+        InetAddress localHost = InetAddress.getLocalHost();
+        ServerSocket ss = new ServerSocket(0, 0, localHost);
         Socket s1 = null, s2 = null;
         try {
             int port = ss.getLocalPort();
 
-            s1 = new Socket(InetAddress.getLocalHost(), port);
+            s1 = new Socket(localHost, port);
             s2 = ss.accept();
 
             // close server socket and the accepted connection
@@ -64,7 +65,7 @@
             s2.close();
 
             ss = new ServerSocket();
-            ss.bind( new InetSocketAddress(port) );
+            ss.bind( new InetSocketAddress(localHost, port) );
             ss.close();
 
             // close the client socket
--- a/test/jdk/java/net/Socks/BadProxySelector.java	Fri May 24 15:36:48 2019 +0200
+++ b/test/jdk/java/net/Socks/BadProxySelector.java	Fri May 24 15:34:14 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Oracle and/or its affiliates. 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
@@ -27,6 +27,7 @@
  * @run main/othervm BadProxySelector
  */
 
+import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.Proxy;
 import java.net.ProxySelector;
@@ -41,13 +42,13 @@
 public class BadProxySelector {
     public static void main(String[] args) throws Exception {
         ProxySelector.setDefault(new HTTPProxySelector());
-        try (ServerSocket ss = new ServerSocket(0);
+        try (ServerSocket ss = new ServerSocket(0, 0, InetAddress.getLocalHost());
              Socket s1 = new Socket(ss.getInetAddress(), ss.getLocalPort());
              Socket s2 = ss.accept()) {
         }
 
        ProxySelector.setDefault(new NullHTTPProxySelector());
-        try (ServerSocket ss = new ServerSocket(0);
+        try (ServerSocket ss = new ServerSocket(0, 0, InetAddress.getLocalHost());
              Socket s1 = new Socket(ss.getInetAddress(), ss.getLocalPort());
              Socket s2 = ss.accept()) {
         }
@@ -60,6 +61,7 @@
 
         @Override
         public List<Proxy> select(URI uri) {
+            System.out.println(this.getClass().getSimpleName() + " called for " + uri);
             List<Proxy> proxies = new ArrayList<>();
             proxies.add(new Proxy(Proxy.Type.HTTP,
                                   new InetSocketAddress("localhost", 0)));
@@ -75,6 +77,7 @@
 
         @Override
         public List<Proxy> select(URI uri) {
+            System.out.println(this.getClass().getSimpleName() + " called for " + uri);
             List<Proxy> proxies = new ArrayList<>();
             proxies.add(null);
             proxies.add(new Proxy(Proxy.Type.HTTP,
--- a/test/jdk/java/net/Socks/SocksProxyVersion.java	Fri May 24 15:36:48 2019 +0200
+++ b/test/jdk/java/net/Socks/SocksProxyVersion.java	Fri May 24 15:34:14 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2019, Oracle and/or its affiliates. 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
@@ -51,7 +51,7 @@
     }
 
     public SocksProxyVersion() throws Exception {
-        ss = new ServerSocket(0);
+        ss = new ServerSocket(0, 0, InetAddress.getLocalHost());
         int port = ss.getLocalPort();
         Thread serverThread = new Thread(this);
         serverThread.start();
--- a/test/jdk/java/net/URLPermission/URLTest.java	Fri May 24 15:36:48 2019 +0200
+++ b/test/jdk/java/net/URLPermission/URLTest.java	Fri May 24 15:34:14 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2019, Oracle and/or its affiliates. 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
@@ -29,6 +29,7 @@
  * @library /test/lib
  * @build jdk.test.lib.net.SimpleSSLContext
  * @run main/othervm URLTest
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true URLTest
  * @summary check URLPermission with Http(s)URLConnection
  */
 
@@ -77,14 +78,14 @@
         if (sm != null) {
             expectException = true;
             Policy.setPolicy(new CustomPolicy(
-                new URLPermission("http://127.0.0.1:"+httpPort+"/foo.html", "GET:X-Foo,Z-Bar"),
-                new URLPermission("https://127.0.0.1:"+httpsPort+"/foo.html", "POST:X-Fob,T-Bar")));
+                new URLPermission("http://" + httpAuth + "/foo.html", "GET:X-Foo,Z-Bar"),
+                new URLPermission("https://" + httpsAuth + "/foo.html", "POST:X-Fob,T-Bar")));
         }
 
-        String url1 = "http://127.0.0.1:"+httpPort+"/foo.html";
-        String url2 = "https://127.0.0.1:"+httpsPort+"/foo.html";
-        String url3 = "http://127.0.0.1:"+httpPort+"/bar.html";
-        String url4 = "https://127.0.0.1:"+httpsPort+"/bar.html";
+        String url1 = "http://" + httpAuth + "/foo.html";
+        String url2 = "https://" + httpsAuth + "/foo.html";
+        String url3 = "http://" + httpAuth + "/bar.html";
+        String url4 = "https://" + httpsAuth + "/bar.html";
 
         // simple positive test. Should succeed
         test(url1, "GET", "X-Foo");
@@ -108,14 +109,14 @@
         SecurityManager sm = System.getSecurityManager();
         if (sm != null) {
             Policy.setPolicy(new CustomPolicy(
-                new URLPermission("http://127.0.0.1:"+httpPort+"/*", "GET:X-Foo"),
-                new URLPermission("https://127.0.0.1:"+httpsPort+"/*", "POST:X-Fob")));
+                new URLPermission("http://" + httpAuth + "/*", "GET:X-Foo"),
+                new URLPermission("https://" + httpsAuth + "/*", "POST:X-Fob")));
         }
 
-        String url1 = "http://127.0.0.1:"+httpPort+"/foo.html";
-        String url2 = "https://127.0.0.1:"+httpsPort+"/foo.html";
-        String url3 = "http://127.0.0.1:"+httpPort+"/bar.html";
-        String url4 = "https://127.0.0.1:"+httpsPort+"/bar.html";
+        String url1 = "http://" + httpAuth + "/foo.html";
+        String url2 = "https://" + httpsAuth + "/foo.html";
+        String url3 = "http://" + httpAuth + "/bar.html";
+        String url4 = "https://" + httpsAuth + "/bar.html";
 
         // simple positive test. Should succeed
         test(url1, "GET", "X-Foo");
@@ -132,14 +133,14 @@
         if (sm != null) {
             expectException = true;
             Policy.setPolicy(new CustomPolicy(
-                new URLPermission("http://127.0.0.1:"+httpPort+"/a/b/-", "DELETE,GET:X-Foo,Y-Foo"),
-                new URLPermission("https://127.0.0.1:"+httpsPort+"/a/c/-", "POST:*")));
+                new URLPermission("http://" + httpAuth + "/a/b/-", "DELETE,GET:X-Foo,Y-Foo"),
+                new URLPermission("https://" + httpsAuth + "/a/c/-", "POST:*")));
         }
 
-        String url1 = "http://127.0.0.1:"+httpPort+"/foo.html";
-        String url2 = "https://127.0.0.1:"+httpsPort+"/a/c/d/e/foo.html";
-        String url3 = "http://127.0.0.1:"+httpPort+"/a/b/c";
-        String url4 = "https://127.0.0.1:"+httpsPort+"/a/b/c";
+        String url1 = "http://" + httpAuth + "/foo.html";
+        String url2 = "https://" + httpsAuth + "/a/c/d/e/foo.html";
+        String url3 = "http://" + httpAuth + "/a/b/c";
+        String url4 = "https://" + httpsAuth + "/a/b/c";
 
         test(url1, "GET", "X-Foo", expectException);
         test(url2, "POST", "X-Zxc");
@@ -147,6 +148,16 @@
         test(url4, "POST", "Y-Foo", expectException);
     }
 
+    static String authority(InetSocketAddress address) {
+        String hostaddr = address.getAddress().getHostAddress();
+        int port = address.getPort();
+        if (hostaddr.indexOf(':') > -1) {
+            return "[" + hostaddr + "]:" + port;
+        } else {
+            return hostaddr + ":" + port;
+        }
+    }
+
     // Convenience methods to simplify previous explicit test scenarios.
     static void test(String u, String method, String header) throws IOException {
         test(u, method, header, null, false);
@@ -175,7 +186,7 @@
         System.out.println("url=" + u + " method=" + method +
                            " header1=" + header1 + " header2=" + header2 +
                            " expectException=" + expectException);
-        HttpURLConnection urlc = (HttpURLConnection)url.openConnection();
+        HttpURLConnection urlc = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
         if (urlc instanceof HttpsURLConnection) {
             HttpsURLConnection ssl = (HttpsURLConnection)urlc;
             ssl.setHostnameVerifier((host, sess) -> true);
@@ -220,11 +231,14 @@
     static SSLContext ctx;
     static int httpPort;
     static int httpsPort;
+    static String httpAuth;
+    static String httpsAuth;
 
     static void createServers() throws Exception {
-        InetSocketAddress any = new InetSocketAddress(0);
-        httpServer = HttpServer.create(any, 0);
-        httpsServer = HttpsServer.create(any, 0);
+        InetAddress loopback = InetAddress.getLoopbackAddress();
+        InetSocketAddress address = new InetSocketAddress(loopback, 0);
+        httpServer = HttpServer.create(address, 0);
+        httpsServer = HttpsServer.create(address, 0);
 
         OkHandler h = new OkHandler();
 
@@ -243,6 +257,8 @@
 
         httpPort = httpServer.getAddress().getPort();
         httpsPort = httpsServer.getAddress().getPort();
+        httpAuth = authority(httpServer.getAddress());
+        httpsAuth = authority(httpsServer.getAddress());
     }
 
     static void shutdown() {
@@ -265,7 +281,9 @@
             java.util.Arrays.stream(permissions).forEach(perms::add);
 
             // needed for the HTTP(S) server
-            perms.add(new SocketPermission("localhost:1024-", "listen,resolve,accept"));
+            InetAddress loopback = InetAddress.getLoopbackAddress();
+            InetSocketAddress serverBound = new InetSocketAddress(loopback,1024);
+            perms.add(new SocketPermission(authority(serverBound) + "-", "listen,resolve,accept"));
             // needed by the test to reset the policy, per testX method
             perms.add(new SecurityPermission("setPolicy"));
             // needed to shutdown the ThreadPoolExecutor ( used by the servers )
--- a/test/jdk/sun/net/www/http/ChunkedOutputStream/CheckError.java	Fri May 24 15:36:48 2019 +0200
+++ b/test/jdk/sun/net/www/http/ChunkedOutputStream/CheckError.java	Fri May 24 15:34:14 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2019, Oracle and/or its affiliates. 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
@@ -24,7 +24,10 @@
 /**
  * @test
  * @bug 5054016
+ * @library /test/lib
  * @summary get the failure immediately when writing individual chunks over socket fail
+ * @run main CheckError
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true CheckError
  */
 
 import java.io.BufferedReader;
@@ -33,11 +36,16 @@
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.net.HttpURLConnection;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.URL;
 import static java.lang.System.out;
 
+import jdk.test.lib.net.URIBuilder;
+
 public class CheckError {
 
     static int BUFFER_SIZE = 8192; // 8k
@@ -51,8 +59,13 @@
         out.println("Server listening on " + port);
 
 
-        URL url = new URL("http://localhost:" + port);
-        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
+        URL url = URIBuilder.newBuilder()
+                  .scheme("http")
+                  .host(server.getAddress())
+                  .port(port)
+                  .toURL();
+
+        HttpURLConnection conn = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
         conn.setRequestMethod("POST");
         conn.setDoOutput(true);
         conn.setChunkedStreamingMode(1024);
@@ -98,13 +111,19 @@
         final ServerSocket serverSocket;
 
         HTTPServer() throws IOException {
-            serverSocket = new ServerSocket(0);
+            InetAddress loopback = InetAddress.getLoopbackAddress();
+            serverSocket = new ServerSocket();
+            serverSocket.bind(new InetSocketAddress(loopback, 0));
         }
 
         int getPort() {
             return serverSocket.getLocalPort();
         }
 
+        InetAddress getAddress() {
+            return serverSocket.getInetAddress();
+        }
+
         public void run() {
             try (Socket client = serverSocket.accept()) {
 
--- a/test/jdk/sun/net/www/httptest/TestHttpServer.java	Fri May 24 15:36:48 2019 +0200
+++ b/test/jdk/sun/net/www/httptest/TestHttpServer.java	Fri May 24 15:34:14 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, Oracle and/or its affiliates. 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
@@ -221,6 +221,7 @@
                 listenerKey = schan.register (selector, SelectionKey.OP_ACCEPT);
             } catch (IOException e) {
                 System.err.println ("Server could not start: " + e);
+                throw new RuntimeException("Server could not start: " + e, e);
             }
         }
 
--- a/test/jdk/sun/net/www/protocol/https/ChunkedOutputStream.java	Fri May 24 15:36:48 2019 +0200
+++ b/test/jdk/sun/net/www/protocol/https/ChunkedOutputStream.java	Fri May 24 15:34:14 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2019, Oracle and/or its affiliates. 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
@@ -27,6 +27,7 @@
  * @modules java.base/sun.net.www
  * @build TestHttpsServer HttpCallback
  * @run main/othervm ChunkedOutputStream
+ * @run main/othervm -Djava.net.preferIPv6Addresses=true ChunkedOutputStream
  *
  *     SunJSSE does not support dynamic system properties, no way to re-use
  *     system properties in samevm/agentvm mode.
@@ -54,7 +55,7 @@
     static final String str2 = "Helloworld1234567890abcdefghijklmnopqrstuvwxyz"+
                                 "1234567890";
 
-    public void request (HttpTransaction req) {
+    public void request(HttpTransaction req) {
         try {
             // this is needed (count++ doesn't work), 'cause we
             // are doing concurrent tests
@@ -80,19 +81,19 @@
             case 1: /* test2 -- closes conn */
                 String reqbody = req.getRequestEntityBody();
                 if (!reqbody.equals(str1)) {
-                    req.sendResponse (500, "Internal server error");
+                    req.sendResponse(500, "Internal server error");
                     req.orderlyClose();
                 }
-                String chunk = req.getRequestHeader ("Transfer-encoding");
-                if (!"chunked".equals (chunk)) {
-                    req.sendResponse (501, "Internal server error");
+                String chunk = req.getRequestHeader("Transfer-encoding");
+                if (!"chunked".equals(chunk)) {
+                    req.sendResponse(501, "Internal server error");
                     req.orderlyClose();
                 }
-                req.setResponseEntityBody (reqbody);
+                req.setResponseEntityBody(reqbody);
                 if (count == 1) {
-                    req.setResponseHeader ("Connection", "close");
+                    req.setResponseHeader("Connection", "close");
                 }
-                req.sendResponse (200, "OK");
+                req.sendResponse(200, "OK");
                 if (count == 1) {
                     req.orderlyClose();
                 }
@@ -100,35 +101,35 @@
             case 2: /* test 3 */
                 reqbody = req.getRequestEntityBody();
                 if (!reqbody.equals(str2)) {
-                    req.sendResponse (500, "Internal server error");
+                    req.sendResponse(500, "Internal server error");
                     req.orderlyClose();
                 }
                 int clen = Integer.parseInt (
-                        req.getRequestHeader ("Content-length"));
+                        req.getRequestHeader("Content-length"));
                 if (clen != str2.length()) {
-                    req.sendResponse (501, "Internal server error");
+                    req.sendResponse(501, "Internal server error");
                     req.orderlyClose();
                 }
                 req.setResponseEntityBody (reqbody);
-                req.setResponseHeader ("Connection", "close");
-                req.sendResponse (200, "OK");
+                req.setResponseHeader("Connection", "close");
+                req.sendResponse(200, "OK");
                 req.orderlyClose();
                 break;
             case 3: /* test 6 */
-                req.setResponseHeader ("Location", "https://foo.bar/");
-                req.setResponseHeader ("Connection", "close");
-                req.sendResponse (307, "Temporary Redirect");
+                req.setResponseHeader("Location", "https://foo.bar/");
+                req.setResponseHeader("Connection", "close");
+                req.sendResponse(307, "Temporary Redirect");
                 req.orderlyClose();
                 break;
             case 4: /* test 7 */
             case 5: /* test 8 */
                 reqbody = req.getRequestEntityBody();
-                if (reqbody != null && !"".equals (reqbody)) {
-                    req.sendResponse (501, "Internal server error");
+                if (reqbody != null && !"".equals(reqbody)) {
+                    req.sendResponse(501, "Internal server error");
                     req.orderlyClose();
                 }
-                req.setResponseHeader ("Connection", "close");
-                req.sendResponse (200, "OK");
+                req.setResponseHeader("Connection", "close");
+                req.sendResponse(200, "OK");
                 req.orderlyClose();
                 break;
             }
@@ -137,148 +138,148 @@
         }
     }
 
-    static void readAndCompare (InputStream is, String cmp) throws IOException {
+    static void readAndCompare(InputStream is, String cmp) throws IOException {
         int c;
-        byte buf[] = new byte [1024];
+        byte buf[] = new byte[1024];
         int off = 0;
         int len = 1024;
         while ((c=is.read(buf, off, len)) != -1) {
             off += c;
             len -= c;
         }
-        String s1 = new String (buf, 0, off, "ISO8859_1");
+        String s1 = new String(buf, 0, off, "ISO8859_1");
         if (!cmp.equals(s1)) {
-            throw new IOException ("strings not same");
+            throw new IOException("strings not same");
         }
     }
 
     /* basic chunked test (runs twice) */
 
-    static void test1 (String u) throws Exception {
-        URL url = new URL (u);
-        System.out.println ("client opening connection to: " + u);
-        HttpURLConnection urlc = (HttpURLConnection)url.openConnection ();
-        urlc.setChunkedStreamingMode (20);
+    static void test1(String u) throws Exception {
+        URL url = new URL(u);
+        System.out.println("client opening connection to: " + u);
+        HttpURLConnection urlc = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
+        urlc.setChunkedStreamingMode(20);
         urlc.setDoOutput(true);
-        urlc.setRequestMethod ("POST");
-        OutputStream os = urlc.getOutputStream ();
-        os.write (str1.getBytes());
+        urlc.setRequestMethod("POST");
+        OutputStream os = urlc.getOutputStream();
+        os.write(str1.getBytes());
         os.close();
         InputStream is = urlc.getInputStream();
-        readAndCompare (is, str1);
+        readAndCompare(is, str1);
         is.close();
     }
 
     /* basic fixed length test */
 
-    static void test3 (String u) throws Exception {
-        URL url = new URL (u);
-        System.out.println ("client opening connection to: " + u);
-        HttpURLConnection urlc = (HttpURLConnection)url.openConnection ();
-        urlc.setFixedLengthStreamingMode (str2.length());
+    static void test3(String u) throws Exception {
+        URL url = new URL(u);
+        System.out.println("client opening connection to: " + u);
+        HttpURLConnection urlc = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
+        urlc.setFixedLengthStreamingMode(str2.length());
         urlc.setDoOutput(true);
-        urlc.setRequestMethod ("POST");
-        OutputStream os = urlc.getOutputStream ();
+        urlc.setRequestMethod("POST");
+        OutputStream os = urlc.getOutputStream();
         os.write (str2.getBytes());
         os.close();
         InputStream is = urlc.getInputStream();
-        readAndCompare (is, str2);
+        readAndCompare(is, str2);
         is.close();
     }
 
     /* write too few bytes */
 
-    static void test4 (String u) throws Exception {
-        URL url = new URL (u);
-        System.out.println ("client opening connection to: " + u);
-        HttpURLConnection urlc = (HttpURLConnection)url.openConnection ();
-        urlc.setFixedLengthStreamingMode (str2.length()+1);
+    static void test4(String u) throws Exception {
+        URL url = new URL(u);
+        System.out.println("client opening connection to: " + u);
+        HttpURLConnection urlc = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
+        urlc.setFixedLengthStreamingMode(str2.length()+1);
         urlc.setDoOutput(true);
-        urlc.setRequestMethod ("POST");
-        OutputStream os = urlc.getOutputStream ();
-        os.write (str2.getBytes());
+        urlc.setRequestMethod("POST");
+        OutputStream os = urlc.getOutputStream();
+        os.write(str2.getBytes());
         try {
             os.close();
-            throw new Exception ("should have thrown IOException");
+            throw new Exception("should have thrown IOException");
         } catch (IOException e) {}
     }
 
     /* write too many bytes */
 
-    static void test5 (String u) throws Exception {
-        URL url = new URL (u);
-        System.out.println ("client opening connection to: " + u);
-        HttpURLConnection urlc = (HttpURLConnection)url.openConnection ();
-        urlc.setFixedLengthStreamingMode (str2.length()-1);
+    static void test5(String u) throws Exception {
+        URL url = new URL(u);
+        System.out.println("client opening connection to: " + u);
+        HttpURLConnection urlc = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
+        urlc.setFixedLengthStreamingMode(str2.length()-1);
         urlc.setDoOutput(true);
-        urlc.setRequestMethod ("POST");
-        OutputStream os = urlc.getOutputStream ();
+        urlc.setRequestMethod("POST");
+        OutputStream os = urlc.getOutputStream();
         try {
-            os.write (str2.getBytes());
-            throw new Exception ("should have thrown IOException");
+            os.write(str2.getBytes());
+            throw new Exception("should have thrown IOException");
         } catch (IOException e) {}
     }
 
     /* check for HttpRetryException on redirection */
 
-    static void test6 (String u) throws Exception {
-        URL url = new URL (u);
-        System.out.println ("client opening connection to: " + u);
-        HttpURLConnection urlc = (HttpURLConnection)url.openConnection ();
-        urlc.setChunkedStreamingMode (20);
+    static void test6(String u) throws Exception {
+        URL url = new URL(u);
+        System.out.println("client opening connection to: " + u);
+        HttpURLConnection urlc = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
+        urlc.setChunkedStreamingMode(20);
         urlc.setDoOutput(true);
-        urlc.setRequestMethod ("POST");
-        OutputStream os = urlc.getOutputStream ();
-        os.write (str1.getBytes());
+        urlc.setRequestMethod("POST");
+        OutputStream os = urlc.getOutputStream();
+        os.write(str1.getBytes());
         os.close();
         try {
             InputStream is = urlc.getInputStream();
-            throw new Exception ("should have gotten HttpRetryException");
+            throw new Exception("should have gotten HttpRetryException");
         } catch (HttpRetryException e) {
             if (e.responseCode() != 307) {
-                throw new Exception ("Wrong response code " + e.responseCode());
+                throw new Exception("Wrong response code " + e.responseCode());
             }
-            if (!e.getLocation().equals ("https://foo.bar/")) {
-                throw new Exception ("Wrong location " + e.getLocation());
+            if (!e.getLocation().equals("https://foo.bar/")) {
+                throw new Exception("Wrong location " + e.getLocation());
             }
         }
     }
 
     /* next two tests send zero length posts */
 
-    static void test7 (String u) throws Exception {
-        URL url = new URL (u);
-        System.out.println ("client opening connection to: " + u);
-        HttpURLConnection urlc = (HttpURLConnection)url.openConnection ();
-        urlc.setChunkedStreamingMode (20);
+    static void test7(String u) throws Exception {
+        URL url = new URL(u);
+        System.out.println("client opening connection to: " + u);
+        HttpURLConnection urlc = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
+        urlc.setChunkedStreamingMode(20);
         urlc.setDoOutput(true);
-        urlc.setRequestMethod ("POST");
-        OutputStream os = urlc.getOutputStream ();
+        urlc.setRequestMethod("POST");
+        OutputStream os = urlc.getOutputStream();
         os.close();
         int ret = urlc.getResponseCode();
         if (ret != 200) {
-            throw new Exception ("Expected 200: got " + ret);
+            throw new Exception("Expected 200: got " + ret);
         }
     }
 
-    static void test8 (String u) throws Exception {
-        URL url = new URL (u);
-        System.out.println ("client opening connection to: " + u);
-        HttpURLConnection urlc = (HttpURLConnection)url.openConnection ();
-        urlc.setFixedLengthStreamingMode (0);
+    static void test8(String u) throws Exception {
+        URL url = new URL(u);
+        System.out.println("client opening connection to: " + u);
+        HttpURLConnection urlc = (HttpURLConnection)url.openConnection(Proxy.NO_PROXY);
+        urlc.setFixedLengthStreamingMode(0);
         urlc.setDoOutput(true);
-        urlc.setRequestMethod ("POST");
-        OutputStream os = urlc.getOutputStream ();
+        urlc.setRequestMethod("POST");
+        OutputStream os = urlc.getOutputStream();
         os.close();
         int ret = urlc.getResponseCode();
         if (ret != 200) {
-            throw new Exception ("Expected 200: got " + ret);
+            throw new Exception("Expected 200: got " + ret);
         }
     }
 
     static TestHttpsServer server;
 
-    public static void main (String[] args) throws Exception {
+    public static void main(String[] args) throws Exception {
         // setup properties to do ssl
         String keyFilename =
             System.getProperty("test.src", "./") + "/" + pathToStores +
@@ -287,6 +288,8 @@
             System.getProperty("test.src", "./") + "/" + pathToStores +
                 "/" + trustStoreFile;
 
+        InetAddress loopback = InetAddress.getLoopbackAddress();
+
         HostnameVerifier reservedHV =
             HttpsURLConnection.getDefaultHostnameVerifier();
         try {
@@ -298,17 +301,17 @@
 
             try {
                 server = new TestHttpsServer(
-                        new ChunkedOutputStream(), 1, 10, 0);
-                System.out.println ("Server started: listening on port: " + server.getLocalPort());
+                        new ChunkedOutputStream(), 1, 10, loopback, 0);
+                System.out.println("Server started: listening on: " + server.getAuthority());
                 // the test server doesn't support keep-alive yet
-                // test1("http://localhost:"+server.getLocalPort()+"/d0");
-                test1("https://localhost:"+server.getLocalPort()+"/d01");
-                test3("https://localhost:"+server.getLocalPort()+"/d3");
-                test4("https://localhost:"+server.getLocalPort()+"/d4");
-                test5("https://localhost:"+server.getLocalPort()+"/d5");
-                test6("https://localhost:"+server.getLocalPort()+"/d6");
-                test7("https://localhost:"+server.getLocalPort()+"/d7");
-                test8("https://localhost:"+server.getLocalPort()+"/d8");
+                // test1("http://" + server.getAuthority() + "/d0");
+                test1("https://" + server.getAuthority() + "/d01");
+                test3("https://" + server.getAuthority() + "/d3");
+                test4("https://" + server.getAuthority() + "/d4");
+                test5("https://" + server.getAuthority() + "/d5");
+                test6("https://" + server.getAuthority() + "/d6");
+                test7("https://" + server.getAuthority() + "/d7");
+                test8("https://" + server.getAuthority() + "/d8");
             } catch (Exception e) {
                 if (server != null) {
                     server.terminate();
@@ -327,8 +330,8 @@
         }
     }
 
-    public static void except (String s) {
+    public static void except(String s) {
         server.terminate();
-        throw new RuntimeException (s);
+        throw new RuntimeException(s);
     }
 }
--- a/test/jdk/sun/net/www/protocol/https/TestHttpsServer.java	Fri May 24 15:36:48 2019 +0200
+++ b/test/jdk/sun/net/www/protocol/https/TestHttpsServer.java	Fri May 24 15:34:14 2019 +0100
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2019, Oracle and/or its affiliates. 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
@@ -70,8 +70,8 @@
      *  incoming request
      */
 
-    public TestHttpsServer (HttpCallback cb) throws IOException {
-        this (cb, 1, 10, 0);
+    public TestHttpsServer(HttpCallback cb) throws IOException {
+        this(cb, 1, 10, 0);
     }
 
     /**
@@ -86,9 +86,9 @@
      *     handle per thread
      */
 
-    public TestHttpsServer (HttpCallback cb, int threads, int cperthread)
+    public TestHttpsServer(HttpCallback cb, int threads, int cperthread)
         throws IOException {
-        this (cb, threads, cperthread, 0);
+        this(cb, threads, cperthread, 0);
     }
 
     /**
@@ -106,12 +106,34 @@
      * @param port the port number to bind the server to. <code>Zero</code>
      *  means choose any free port.
      */
+    public TestHttpsServer(HttpCallback cb, int threads, int cperthread, int port)
+        throws IOException {
+        this(cb, threads, cperthread, null, port);
+    }
 
-    public TestHttpsServer (HttpCallback cb, int threads, int cperthread, int port)
+    /**
+     * Create a <code>TestHttpsServer<code> instance with the specified number
+     * of threads and maximum number of connections per thread and running on
+     * the specified port. The specified number of threads are created to
+     * handle incoming requests, and each thread is allowed
+     * to handle a number of simultaneous TCP connections.
+     * @param cb the callback object which is invoked to handle
+     *  each incoming request
+     * @param threads the number of threads to create to handle
+     *  requests in parallel
+     * @param cperthread the number of simultaneous TCP connections
+     *  to handle per thread
+     * @param address the InetAddress to bind to. {@code Null} means the
+     *  wildcard address.
+     * @param port the port number to bind the server to. {@code Zero}
+     *  means choose any free port.
+     */
+
+    public TestHttpsServer(HttpCallback cb, int threads, int cperthread, InetAddress address, int port)
         throws IOException {
-        schan = ServerSocketChannel.open ();
-        InetSocketAddress addr = new InetSocketAddress (port);
-        schan.socket().bind (addr);
+        schan = ServerSocketChannel.open();
+        InetSocketAddress addr = new InetSocketAddress(address, port);
+        schan.socket().bind(addr);
         this.threads = threads;
         this.cb = cb;
         this.cperthread = cperthread;
@@ -135,9 +157,9 @@
 
             sslCtx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
 
-            servers = new Server [threads];
+            servers = new Server[threads];
             for (int i=0; i<threads; i++) {
-                servers[i] = new Server (cb, schan, cperthread);
+                servers[i] = new Server(cb, schan, cperthread);
                 servers[i].start();
             }
         } catch (Exception ex) {
@@ -150,7 +172,7 @@
      *  all channels in that thread waiting to be closed are forceably closed.
      */
 
-    public void terminate () {
+    public void terminate() {
         for (int i=0; i<threads; i++) {
             servers[i].terminate ();
         }
@@ -165,6 +187,14 @@
         return schan.socket().getLocalPort ();
     }
 
+    public String getAuthority() {
+        InetAddress address = schan.socket().getInetAddress();
+        String hostaddr = address.getHostAddress();
+        if (address.isAnyLocalAddress()) hostaddr = "localhost";
+        if (hostaddr.indexOf(':') > -1) hostaddr = "[" + hostaddr + "]";
+        return hostaddr + ":" + getLocalPort();
+    }
+
     static class Server extends Thread {
 
         ServerSocketChannel schan;
@@ -178,65 +208,65 @@
         ClosedChannelList clist;
         boolean shutdown;
 
-        Server (HttpCallback cb, ServerSocketChannel schan, int maxconn) {
+        Server(HttpCallback cb, ServerSocketChannel schan, int maxconn) {
             this.schan = schan;
             this.maxconn = maxconn;
             this.cb = cb;
             nconn = 0;
-            consumeBuffer = ByteBuffer.allocate (512);
-            clist = new ClosedChannelList ();
+            consumeBuffer = ByteBuffer.allocate(512);
+            clist = new ClosedChannelList();
             try {
-                selector = Selector.open ();
-                schan.configureBlocking (false);
-                listenerKey = schan.register (selector, SelectionKey.OP_ACCEPT);
+                selector = Selector.open();
+                schan.configureBlocking(false);
+                listenerKey = schan.register(selector, SelectionKey.OP_ACCEPT);
             } catch (IOException e) {
-                System.err.println ("Server could not start: " + e);
+                System.err.println("Server could not start: " + e);
             }
         }
 
         /* Stop the thread as soon as possible */
-        public synchronized void terminate () {
+        public synchronized void terminate() {
             shutdown = true;
         }
 
-        public void run ()  {
+        public void run()  {
             try {
                 while (true) {
-                    selector.select (1000);
+                    selector.select(1000);
                     Set selected = selector.selectedKeys();
                     Iterator iter = selected.iterator();
                     while (iter.hasNext()) {
                         key = (SelectionKey)iter.next();
                         if (key.equals (listenerKey)) {
-                            SocketChannel sock = schan.accept ();
+                            SocketChannel sock = schan.accept();
                             if (sock == null) {
                                 /* false notification */
                                 iter.remove();
                                 continue;
                             }
-                            sock.configureBlocking (true);
+                            sock.configureBlocking(true);
                             SSLEngine sslEng = sslCtx.createSSLEngine();
                             sslEng.setUseClientMode(false);
                             new ServerWorker(cb, sock, sslEng).start();
                             nconn ++;
                             if (nconn == maxconn) {
                                 /* deregister */
-                                listenerKey.cancel ();
+                                listenerKey.cancel();
                                 listenerKey = null;
                             }
                         } else {
                             if (key.isReadable()) {
                                 boolean closed = false;
-                                SocketChannel chan = (SocketChannel) key.channel();
+                                SocketChannel chan = (SocketChannel)key.channel();
                                 if (key.attachment() != null) {
-                                    closed = consume (chan);
+                                    closed = consume(chan);
                                 }
 
                                 if (closed) {
-                                    chan.close ();
-                                    key.cancel ();
+                                    chan.close();
+                                    key.cancel();
                                     if (nconn == maxconn) {
-                                        listenerKey = schan.register (selector, SelectionKey.OP_ACCEPT);
+                                        listenerKey = schan.register(selector, SelectionKey.OP_ACCEPT);
                                     }
                                     nconn --;
                                 }
@@ -248,24 +278,24 @@
 
                     synchronized (this) {
                         if (shutdown) {
-                            clist.terminate ();
+                            clist.terminate();
                             return;
                         }
                     }
                 }
             } catch (IOException e) {
-                System.out.println ("Server exception: " + e);
+                System.out.println("Server exception: " + e);
                 // TODO finish
             }
         }
 
         /* read all the data off the channel without looking at it
-             * return true if connection closed
-             */
-        boolean consume (SocketChannel chan) {
+         * return true if connection closed
+         */
+        boolean consume(SocketChannel chan) {
             try {
-                consumeBuffer.clear ();
-                int c = chan.read (consumeBuffer);
+                consumeBuffer.clear();
+                int c = chan.read(consumeBuffer);
                 if (c == -1)
                     return true;
             } catch (IOException e) {
@@ -298,7 +328,7 @@
          */
         private int appBBSize;
 
-        ServerWorker (HttpCallback cb, SocketChannel schan, SSLEngine sslEng) {
+        ServerWorker(HttpCallback cb, SocketChannel schan, SSLEngine sslEng) {
             this.sslEng = sslEng;
             this.schan = schan;
             this.cb = cb;
@@ -431,21 +461,21 @@
 
         /* return true if the connection is closed, false otherwise */
 
-        private boolean read (SocketChannel chan, SSLEngine sslEng) {
+        private boolean read(SocketChannel chan, SSLEngine sslEng) {
             HttpTransaction msg;
             boolean res;
             try {
-                InputStream is = new BufferedInputStream (new NioInputStream (chan, sslEng, inNetBB, inAppBB));
-                String requestline = readLine (is);
-                MessageHeader mhead = new MessageHeader (is);
-                String clen = mhead.findValue ("Content-Length");
-                String trferenc = mhead.findValue ("Transfer-Encoding");
+                InputStream is = new BufferedInputStream(new NioInputStream(chan, sslEng, inNetBB, inAppBB));
+                String requestline = readLine(is);
+                MessageHeader mhead = new MessageHeader(is);
+                String clen = mhead.findValue("Content-Length");
+                String trferenc = mhead.findValue("Transfer-Encoding");
                 String data = null;
-                if (trferenc != null && trferenc.equals ("chunked"))
-                    data = new String (readChunkedData (is));
+                if (trferenc != null && trferenc.equals("chunked"))
+                    data = new String(readChunkedData(is));
                 else if (clen != null)
-                    data = new String (readNormalData (is, Integer.parseInt (clen)));
-                String[] req = requestline.split (" ");
+                    data = new String(readNormalData(is, Integer.parseInt(clen)));
+                String[] req = requestline.split(" ");
                 if (req.length < 2) {
                     /* invalid request line */
                     return false;
@@ -453,13 +483,13 @@
                 String cmd = req[0];
                 URI uri = null;
                 try {
-                    uri = new URI (req[1]);
-                    msg = new HttpTransaction (this, cmd, uri, mhead, data, null, chan);
-                    cb.request (msg);
+                    uri = new URI(req[1]);
+                    msg = new HttpTransaction(this, cmd, uri, mhead, data, null, chan);
+                    cb.request(msg);
                 } catch (URISyntaxException e) {
                     System.err.println ("Invalid URI: " + e);
-                    msg = new HttpTransaction (this, cmd, null, null, null, null, chan);
-                    msg.sendResponse (501, "Whatever");
+                    msg = new HttpTransaction(this, cmd, null, null, null, null, chan);
+                    msg.sendResponse(501, "Whatever");
                 }
                 res = false;
             } catch (IOException e) {
@@ -468,8 +498,8 @@
             return res;
         }
 
-        byte[] readNormalData (InputStream is, int len) throws IOException {
-            byte [] buf  = new byte [len];
+        byte[] readNormalData(InputStream is, int len) throws IOException {
+            byte[] buf  = new byte[len];
             int c, off=0, remain=len;
             while (remain > 0 && ((c=is.read (buf, off, remain))>0)) {
                 remain -= c;
@@ -489,31 +519,31 @@
             }
         }
 
-        byte[] readChunkedData (InputStream is) throws IOException {
-            LinkedList l = new LinkedList ();
+        byte[] readChunkedData(InputStream is) throws IOException {
+            LinkedList l = new LinkedList();
             int total = 0;
             for (int len=readChunkLen(is); len!=0; len=readChunkLen(is)) {
-                l.add (readNormalData(is, len));
+                l.add(readNormalData(is, len));
                 total += len;
                 readCRLF(is); // CRLF at end of chunk
             }
             readCRLF(is); // CRLF at end of Chunked Stream.
-            byte[] buf = new byte [total];
+            byte[] buf = new byte[total];
             Iterator i = l.iterator();
             int x = 0;
             while (i.hasNext()) {
                 byte[] b = (byte[])i.next();
-                System.arraycopy (b, 0, buf, x, b.length);
+                System.arraycopy(b, 0, buf, x, b.length);
                 x += b.length;
             }
             return buf;
         }
 
-        private int readChunkLen (InputStream is) throws IOException {
+        private int readChunkLen(InputStream is) throws IOException {
             int c, len=0;
             boolean done=false, readCR=false;
             while (!done) {
-                c = is.read ();
+                c = is.read();
                 if (c == '\n' && readCR) {
                     done = true;
                 } else {
@@ -535,13 +565,13 @@
             return len;
         }
 
-        private String readLine (InputStream is) throws IOException {
+        private String readLine(InputStream is) throws IOException {
             boolean done=false, readCR=false;
-            byte[] b = new byte [512];
+            byte[] b = new byte[512];
             int c, l = 0;
 
             while (!done) {
-                c = is.read ();
+                c = is.read();
                 if (c == '\n' && readCR) {
                     done = true;
                 } else {
@@ -552,7 +582,7 @@
                     }
                 }
             }
-            return new String (b);
+            return new String(b);
         }
 
         /** close the channel associated with the current key by:
@@ -561,13 +591,13 @@
          * 3. After a period, close the socket
          */
 
-        synchronized void orderlyCloseChannel (SocketChannel ch) throws IOException {
+        synchronized void orderlyCloseChannel(SocketChannel ch) throws IOException {
             ch.socket().shutdownOutput();
         }
 
-        synchronized void abortiveCloseChannel (SocketChannel ch) throws IOException {
-            Socket s = ch.socket ();
-            s.setSoLinger (true, 0);
+        synchronized void abortiveCloseChannel(SocketChannel ch) throws IOException {
+            Socket s = ch.socket();
+            s.setSoLinger(true, 0);
             ch.close();
         }
     }
@@ -592,27 +622,27 @@
         boolean reset;
         int readlimit;
 
-        public NioInputStream (SocketChannel chan, SSLEngine sslEng, ByteBuffer inNetBB, ByteBuffer inAppBB) throws IOException {
+        public NioInputStream(SocketChannel chan, SSLEngine sslEng, ByteBuffer inNetBB, ByteBuffer inAppBB) throws IOException {
             this.sslEng = sslEng;
             this.channel = chan;
             selector = Selector.open();
             this.inNetBB = inNetBB;
             this.inAppBB = inAppBB;
-            key = chan.register (selector, SelectionKey.OP_READ);
+            key = chan.register(selector, SelectionKey.OP_READ);
             available = 0;
             one = new byte[1];
             closed = marked = reset = false;
         }
 
-        public synchronized int read (byte[] b) throws IOException {
-            return read (b, 0, b.length);
+        public synchronized int read(byte[] b) throws IOException {
+            return read(b, 0, b.length);
         }
 
-        public synchronized int read () throws IOException {
-            return read (one, 0, 1);
+        public synchronized int read() throws IOException {
+            return read(one, 0, 1);
         }
 
-        public synchronized int read (byte[] b, int off, int srclen) throws IOException {
+        public synchronized int read(byte[] b, int off, int srclen) throws IOException {
 
             int canreturn, willreturn;
 
@@ -620,8 +650,8 @@
                 return -1;
 
             if (reset) { /* satisfy from markBuf */
-                canreturn = markBuf.remaining ();
-                willreturn = canreturn>srclen ? srclen : canreturn;
+                canreturn = markBuf.remaining();
+                willreturn = canreturn > srclen ? srclen : canreturn;
                 markBuf.get(b, off, willreturn);
                 if (canreturn == willreturn) {
                     reset = false;
@@ -629,16 +659,16 @@
             } else { /* satisfy from channel */
                 canreturn = available();
                 if (canreturn == 0) {
-                    block ();
+                    block();
                     canreturn = available();
                 }
-                willreturn = canreturn>srclen ? srclen : canreturn;
+                willreturn = canreturn > srclen ? srclen : canreturn;
                 inAppBB.get(b, off, willreturn);
                 available -= willreturn;
 
                 if (marked) { /* copy into markBuf */
                     try {
-                        markBuf.put (b, off, willreturn);
+                        markBuf.put(b, off, willreturn);
                     } catch (BufferOverflowException e) {
                         marked = false;
                     }
@@ -647,9 +677,9 @@
             return willreturn;
         }
 
-        public synchronized int available () throws IOException {
+        public synchronized int available() throws IOException {
             if (closed)
-                throw new IOException ("Stream is closed");
+                throw new IOException("Stream is closed");
 
             if (reset)
                 return markBuf.remaining();
@@ -657,8 +687,8 @@
             if (available > 0)
                 return available;
 
-            inAppBB.clear ();
-            int bytes = channel.read (inNetBB);
+            inAppBB.clear();
+            int bytes = channel.read(inNetBB);
 
             int needed = sslEng.getSession().getApplicationBufferSize();
             if (needed > inAppBB.remaining()) {
@@ -672,45 +702,45 @@
             if (available > 0)
                 inAppBB.flip();
             else if (available == -1)
-                throw new IOException ("Stream is closed");
+                throw new IOException("Stream is closed");
             return available;
         }
 
         /**
          * block() only called when available==0 and buf is empty
          */
-        private synchronized void block () throws IOException {
+        private synchronized void block() throws IOException {
             //assert available == 0;
-            int n = selector.select ();
+            int n = selector.select();
             //assert n == 1;
             selector.selectedKeys().clear();
-            available ();
+            available();
         }
 
-        public void close () throws IOException {
+        public void close() throws IOException {
             if (closed)
                 return;
-            channel.close ();
+            channel.close();
             closed = true;
         }
 
-        public synchronized void mark (int readlimit) {
+        public synchronized void mark(int readlimit) {
             if (closed)
                 return;
             this.readlimit = readlimit;
-            markBuf = ByteBuffer.allocate (readlimit);
+            markBuf = ByteBuffer.allocate(readlimit);
             marked = true;
             reset = false;
         }
 
-        public synchronized void reset () throws IOException {
+        public synchronized void reset() throws IOException {
             if (closed )
                 return;
             if (!marked)
-                throw new IOException ("Stream not marked");
+                throw new IOException("Stream not marked");
             marked = false;
             reset = true;
-            markBuf.flip ();
+            markBuf.flip();
         }
     }
 
@@ -724,33 +754,33 @@
         boolean closed;
         byte[] one;
 
-        public NioOutputStream (SocketChannel channel, SSLEngine sslEng, ByteBuffer outNetBB, ByteBuffer outAppBB) throws IOException {
+        public NioOutputStream(SocketChannel channel, SSLEngine sslEng, ByteBuffer outNetBB, ByteBuffer outAppBB) throws IOException {
             this.sslEng = sslEng;
             this.channel = channel;
             this.outNetBB = outNetBB;
             this.outAppBB = outAppBB;
-            selector = Selector.open ();
-            key = channel.register (selector, SelectionKey.OP_WRITE);
+            selector = Selector.open();
+            key = channel.register(selector, SelectionKey.OP_WRITE);
             closed = false;
-            one = new byte [1];
+            one = new byte[1];
         }
 
-        public synchronized void write (int b) throws IOException {
+        public synchronized void write(int b) throws IOException {
             one[0] = (byte)b;
-            write (one, 0, 1);
+            write(one, 0, 1);
         }
 
-        public synchronized void write (byte[] b) throws IOException {
-            write (b, 0, b.length);
+        public synchronized void write(byte[] b) throws IOException {
+            write(b, 0, b.length);
         }
 
-        public synchronized void write (byte[] b, int off, int len) throws IOException {
+        public synchronized void write(byte[] b, int off, int len) throws IOException {
             if (closed)
-                throw new IOException ("stream is closed");
+                throw new IOException("stream is closed");
 
-            outAppBB = ByteBuffer.allocate (len);
-            outAppBB.put (b, off, len);
-            outAppBB.flip ();
+            outAppBB = ByteBuffer.allocate(len);
+            outAppBB.put(b, off, len);
+            outAppBB.flip();
             int n;
             outNetBB.clear();
             int needed = sslEng.getSession().getPacketBufferSize();
@@ -764,15 +794,15 @@
                 newLen -= n;
                 if (newLen == 0)
                     return;
-                selector.select ();
-                selector.selectedKeys().clear ();
+                selector.select();
+                selector.selectedKeys().clear();
             }
         }
 
-        public void close () throws IOException {
+        public void close() throws IOException {
             if (closed)
                 return;
-            channel.close ();
+            channel.close();
             closed = true;
         }
     }
@@ -802,18 +832,18 @@
      */
     private static class IValue {
         int v;
-        IValue (int i) {
+        IValue(int i) {
             v =i;
         }
     }
 
 
-    private static BValue getCond (String condition) {
+    private static BValue getCond(String condition) {
         synchronized (conditions) {
-            BValue cond = (BValue) conditions.get (condition);
+            BValue cond = (BValue) conditions.get(condition);
             if (cond == null) {
                 cond = new BValue();
-                conditions.put (condition, cond);
+                conditions.put(condition, cond);
             }
             return cond;
         }
@@ -827,8 +857,8 @@
      * first.
      */
 
-    public static void setCondition (String condition) {
-        BValue cond = getCond (condition);
+    public static void setCondition(String condition) {
+        BValue cond = getCond(condition);
         synchronized (cond) {
             if (cond.v) {
                 return;
@@ -846,8 +876,8 @@
      * immediately without blocking.
      */
 
-    public static void waitForCondition (String condition) {
-        BValue cond = getCond (condition);
+    public static void waitForCondition(String condition) {
+        BValue cond = getCond(condition);
         synchronized (cond) {
             if (!cond.v) {
                 try {
@@ -872,7 +902,7 @@
      * will be a hang.
      */
 
-    public static void rendezvous (String condition, int N) {
+    public static void rendezvous(String condition, int N) {
         BValue cond;
         IValue iv;
         String name = "RV_"+condition;
@@ -880,30 +910,30 @@
         /* get the condition */
 
         synchronized (conditions) {
-            cond = (BValue)conditions.get (name);
+            cond = (BValue)conditions.get(name);
             if (cond == null) {
                 /* we are first caller */
                 if (N < 2) {
-                    throw new RuntimeException ("rendezvous must be called with N >= 2");
+                    throw new RuntimeException("rendezvous must be called with N >= 2");
                 }
-                cond = new BValue ();
-                conditions.put (name, cond);
-                iv = new IValue (N-1);
-                rv.put (name, iv);
+                cond = new BValue();
+                conditions.put(name, cond);
+                iv = new IValue(N-1);
+                rv.put(name, iv);
             } else {
                 /* already initialised, just decrement the counter */
-                iv = (IValue) rv.get (name);
-                iv.v --;
+                iv = (IValue) rv.get(name);
+                iv.v--;
             }
         }
 
         if (iv.v > 0) {
-            waitForCondition (name);
+            waitForCondition(name);
         } else {
-            setCondition (name);
+            setCondition(name);
             synchronized (conditions) {
-                clearCondition (name);
-                rv.remove (name);
+                clearCondition(name);
+                rv.remove(name);
             }
         }
     }
@@ -919,13 +949,13 @@
     public static void clearCondition(String condition) {
         BValue cond;
         synchronized (conditions) {
-            cond = (BValue) conditions.get (condition);
+            cond = (BValue) conditions.get(condition);
             if (cond == null) {
                 return;
             }
             synchronized (cond) {
                 if (cond.v) {
-                    conditions.remove (condition);
+                    conditions.remove(condition);
                 }
             }
         }