Index: runtime/bin/vmservice/server.dart |
diff --git a/runtime/bin/vmservice/server.dart b/runtime/bin/vmservice/server.dart |
index 826205326a4d1390e4f4987fff3738c4683c5dcc..9a48adf3bbe9bba32782e3ada6df2f8665368611 100644 |
--- a/runtime/bin/vmservice/server.dart |
+++ b/runtime/bin/vmservice/server.dart |
@@ -134,11 +134,8 @@ class Server { |
} |
var ip = _server.address.address; |
var port = _server.port; |
- if (useAuthToken) { |
- return Uri.parse('http://$ip:$port/$serviceAuthToken/'); |
- } else { |
- return Uri.parse('http://$ip:$port/'); |
- } |
+ var path = useAuthToken ? "$serviceAuthToken/" : "/"; |
+ return new Uri(scheme: 'http', host: ip, port: port, path: path); |
} |
Server(this._service, this._ip, this._port, this._originCheckDisabled); |
@@ -154,6 +151,7 @@ class Server { |
// Explicitly add localhost and 127.0.0.1 on any port (necessary for |
// adb port forwarding). |
if ((uri.host == 'localhost') || |
+ (uri.host == '::1') || |
(uri.host == '127.0.0.1')) { |
return true; |
} |
@@ -300,28 +298,34 @@ class Server { |
} |
} |
- Future startup() { |
+ Future startup() async { |
if (_server != null) { |
// Already running. |
- return new Future.value(this); |
+ return this; |
} |
- var address = new InternetAddress(_ip); |
// Startup HTTP server. |
- return HttpServer.bind(address, _port).then((s) { |
- _server = s; |
+ try { |
+ var addresses = await InternetAddress.lookup(_ip); |
+ var address; |
+ // Prefer IPv4 addresses. |
+ for (var i = 0; i < addresses.length; i++) { |
+ address = addresses[i]; |
+ if (address.type == InternetAddressType.IP_V4) break; |
+ } |
+ _server = await HttpServer.bind(address, _port); |
_server.listen(_requestHandler, cancelOnError: true); |
print('Observatory listening on $serverAddress'); |
// Server is up and running. |
_notifyServerState(serverAddress.toString()); |
onServerAddressChange('$serverAddress'); |
return this; |
- }).catchError((e, st) { |
+ } catch (e, st) { |
print('Could not start Observatory HTTP server:\n$e\n$st\n'); |
_notifyServerState(""); |
onServerAddressChange(null); |
return this; |
- }); |
+ } |
} |
Future cleanup(bool force) { |