diff --git a/pkgs/http_multi_server/CHANGELOG.md b/pkgs/http_multi_server/CHANGELOG.md
index ac00908..8cab523 100644
--- a/pkgs/http_multi_server/CHANGELOG.md
+++ b/pkgs/http_multi_server/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.2
+
+* Remove the workaround for [issue 19815][].
+
 ## 1.0.1
 
 * Ignore errors from one of the servers if others are still bound. In
diff --git a/pkgs/http_multi_server/lib/http_multi_server.dart b/pkgs/http_multi_server/lib/http_multi_server.dart
index da12888..c055367 100644
--- a/pkgs/http_multi_server/lib/http_multi_server.dart
+++ b/pkgs/http_multi_server/lib/http_multi_server.dart
@@ -99,15 +99,20 @@
   /// [HttpServer.bindSecure].
   static Future<HttpServer> _loopback(int port,
       Future<HttpServer> bind(InternetAddress address, int port)) {
-    return bind(InternetAddress.LOOPBACK_IP_V4, port).then((v4Server) {
+    return Future.wait([
+      supportsIpV6,
+      bind(InternetAddress.LOOPBACK_IP_V4, port)
+    ]).then((results) {
+      var supportsIpV6 = results[0];
+      var v4Server = results[1];
+
+      if (!supportsIpV6) return v4Server;
+
       // Reuse the IPv4 server's port so that if [port] is 0, both servers use
       // the same ephemeral port.
       return bind(InternetAddress.LOOPBACK_IP_V6, v4Server.port)
-          .then((v6Server) => new HttpMultiServer([v4Server, v6Server]))
-          .catchError((error) {
-        // If we fail to bind to IPv6, just use IPv4.
-        if (error is SocketException) return v4Server;
-        throw error;
+          .then((v6Server) {
+        return new HttpMultiServer([v4Server, v6Server]);
       });
     });
   }
diff --git a/pkgs/http_multi_server/lib/src/utils.dart b/pkgs/http_multi_server/lib/src/utils.dart
index d615975..9e95aba 100644
--- a/pkgs/http_multi_server/lib/src/utils.dart
+++ b/pkgs/http_multi_server/lib/src/utils.dart
@@ -7,8 +7,6 @@
 import 'dart:async';
 import 'dart:io';
 
-// TODO(nweiz): Revert this to the version of [mergeStreams] found elsewhere in
-// the repo once issue 19815 is fixed in dart:io.
 /// Merges all streams in [streams] into a single stream that emits all of their
 /// values.
 ///
@@ -20,17 +18,9 @@
   controller = new StreamController(onListen: () {
     for (var stream in streams) {
       var subscription;
-      subscription = stream.listen(controller.add, onError: (error, trace) {
-        if (subscriptions.length == 1) {
-          // If the last subscription errored, pass it on.
-          controller.addError(error, trace);
-        } else {
-          // If only one of the subscriptions has an error (usually IPv6 failing
-          // late), then just remove that subscription and ignore the error.
-          subscriptions.remove(subscription);
-          subscription.cancel();
-        }
-      }, onDone: () {
+      subscription = stream.listen(controller.add,
+          onError: controller.addError,
+          onDone: () {
         subscriptions.remove(subscription);
         if (subscriptions.isEmpty) controller.close();
       });
@@ -52,3 +42,21 @@
 
   return controller.stream;
 }
+
+/// A cache for [supportsIpV6].
+bool _supportsIpV6;
+
+/// Returns whether this computer supports binding to IPv6 addresses.
+Future<bool> get supportsIpV6 {
+  if (_supportsIpV6 != null) return new Future.value(_supportsIpV6);
+
+  return ServerSocket.bind(InternetAddress.LOOPBACK_IP_V6, 0).then((socket) {
+    _supportsIpV6 = true;
+    socket.close();
+    return true;
+  }).catchError((error) {
+    if (error is! SocketException) throw error;
+    _supportsIpV6 = false;
+    return false;
+  });
+}
diff --git a/pkgs/http_multi_server/pubspec.yaml b/pkgs/http_multi_server/pubspec.yaml
index 2bdb4a2..c7361d4 100644
--- a/pkgs/http_multi_server/pubspec.yaml
+++ b/pkgs/http_multi_server/pubspec.yaml
@@ -1,5 +1,5 @@
 name: http_multi_server
-version: 1.0.1
+version: 1.0.2
 author: "Dart Team <misc@dartlang.org>"
 homepage: http://www.dartlang.org
 description:
@@ -8,4 +8,4 @@
   unittest: ">=0.11.0 <0.12.0"
   http: ">=0.11.0 <0.12.0"
 environment:
-  sdk: ">=1.4.0 <2.0.0"
+  sdk: ">=1.6.0-dev.6.0 <2.0.0"
diff --git a/pkgs/http_multi_server/test/http_multi_server_test.dart b/pkgs/http_multi_server/test/http_multi_server_test.dart
index 0140ee7..a3d9062 100644
--- a/pkgs/http_multi_server/test/http_multi_server_test.dart
+++ b/pkgs/http_multi_server/test/http_multi_server_test.dart
@@ -108,7 +108,7 @@
       expect(http.read("http://127.0.0.1:${server.port}/"),
           completion(equals("got request")));
 
-      return _supportsIpV6.then((supportsIpV6) {
+      return supportsIpV6.then((supportsIpV6) {
         if (!supportsIpV6) return;
         expect(http.read("http://[::1]:${server.port}/"),
             completion(equals("got request")));
@@ -117,26 +117,6 @@
   });
 }
 
-/// A cache for [supportsIpV6].
-bool _supportsIpV6Cache;
-
-// TODO(nweiz): This is known to be inaccurate on Windows machines with IPv6
-// disabled (issue 19815). Tests will fail on such machines.
-/// Returns whether this computer supports binding to IPv6 addresses.
-Future<bool> get _supportsIpV6 {
-  if (_supportsIpV6Cache != null) return new Future.value(_supportsIpV6Cache);
-
-  return ServerSocket.bind(InternetAddress.LOOPBACK_IP_V6, 0).then((socket) {
-    _supportsIpV6Cache = true;
-    socket.close();
-    return true;
-  }).catchError((error) {
-    if (error is! SocketException) throw error;
-    _supportsIpV6Cache = false;
-    return false;
-  });
-}
-
 /// Makes a GET request to the root of [server] and returns the response.
 Future<http.Response> _get(HttpServer server) => http.get(_urlFor(server));
 
