From 0ae5ab05a0768af1c0cdc5ed395e8c660693819f Mon Sep 17 00:00:00 2001
From: Natalie Weizenbaum <nweiz@google.com>
Date: Mon, 18 May 2015 17:49:12 -0700
Subject: [PATCH] Use http_multi_server for serving on localhost.

This helps avoid issues where "localhost" means different things on
different platforms.

Closes #100

R=kevmoo@google.com

Review URL: https://codereview.chromium.org//1145483003
---
 lib/src/runner/browser/server.dart | 8 ++++----
 pubspec.yaml                       | 1 +
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/lib/src/runner/browser/server.dart b/lib/src/runner/browser/server.dart
index 5fbbf8ad..b49b1832 100644
--- a/lib/src/runner/browser/server.dart
+++ b/lib/src/runner/browser/server.dart
@@ -8,6 +8,7 @@ import 'dart:async';
 import 'dart:convert';
 import 'dart:io';
 
+import 'package:http_multi_server/http_multi_server.dart';
 import 'package:path/path.dart' as p;
 import 'package:pool/pool.dart';
 import 'package:shelf/shelf.dart' as shelf;
@@ -144,7 +145,7 @@ class BrowserServer {
         _compilers = new CompilerPool(color: color);
 
   /// Starts the underlying server.
-  Future _load() {
+  Future _load() async {
     var cascade = new shelf.Cascade()
         .add(_webSocketHandler.handler);
 
@@ -160,9 +161,8 @@ class BrowserServer {
       .addMiddleware(nestingMiddleware(_secret))
       .addHandler(cascade.handler);
 
-    return shelf_io.serve(pipeline, 'localhost', 0).then((server) {
-      _server = server;
-    });
+    _server = await HttpMultiServer.loopback(0);
+    shelf_io.serveRequests(_server, pipeline);
   }
 
   /// Returns a handler that serves the contents of the "packages/" directory
diff --git a/pubspec.yaml b/pubspec.yaml
index 0a9297e9..798af864 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -10,6 +10,7 @@ dependencies:
   args: '>=0.12.1 <0.14.0'
   barback: '>=0.14.0 <0.16.0'
   crypto: '^0.9.0'
+  http_multi_server: '^1.0.0'
   http_parser: '^0.0.2'
   path: '^1.2.0'
   pool: '^1.0.0'
-- 
GitLab