diff --git a/analysis_options.yaml b/analysis_options.yaml
new file mode 100644
index 0000000..6f476fe
--- /dev/null
+++ b/analysis_options.yaml
@@ -0,0 +1,44 @@
+include: package:pedantic/analysis_options.yaml
+analyzer:
+  strong-mode:
+    implicit-casts: false
+linter:
+  rules:
+    - avoid_empty_else
+    - avoid_init_to_null
+    - avoid_null_checks_in_equality_operators
+    - avoid_unused_constructor_parameters
+    - await_only_futures
+    - camel_case_types
+    - cancel_subscriptions
+    - constant_identifier_names
+    - control_flow_in_finally
+    - directives_ordering
+    - empty_catches
+    - empty_constructor_bodies
+    - empty_statements
+    - hash_and_equals
+    - implementation_imports
+    - iterable_contains_unrelated_type
+    - library_names
+    - library_prefixes
+    - list_remove_unrelated_type
+    - non_constant_identifier_names
+    - overridden_fields
+    - package_api_docs
+    - package_names
+    - package_prefixed_library_names
+    - prefer_equal_for_default_values
+    - prefer_final_fields
+    - prefer_generic_function_type_aliases
+    - prefer_is_not_empty
+    - slash_for_doc_comments
+    - super_goes_last
+    - test_types_in_equals
+    - throw_in_finally
+    - type_init_formals
+    - unnecessary_brace_in_string_interps
+    - unnecessary_const
+    - unnecessary_new
+    - unrelated_type_equality_checks
+    - valid_regexps
diff --git a/lib/http_multi_server.dart b/lib/http_multi_server.dart
index 309e57f..22c6d62 100644
--- a/lib/http_multi_server.dart
+++ b/lib/http_multi_server.dart
@@ -86,7 +86,7 @@
   /// listened to when this is called.
   HttpMultiServer(Iterable<HttpServer> servers)
       : _servers = servers.toSet(),
-        defaultResponseHeaders = new MultiHeaders(
+        defaultResponseHeaders = MultiHeaders(
             servers.map((server) => server.defaultResponseHeaders)),
         super(StreamGroup.merge(servers));
 
@@ -95,7 +95,7 @@
   ///
   /// See [HttpServer.bind].
   static Future<HttpServer> loopback(int port,
-      {int backlog, bool v6Only: false, bool shared: false}) {
+      {int backlog, bool v6Only = false, bool shared = false}) {
     if (backlog == null) backlog = 0;
 
     return _loopback(
@@ -109,9 +109,9 @@
   /// See [HttpServer.bindSecure].
   static Future<HttpServer> loopbackSecure(int port, SecurityContext context,
       {int backlog,
-      bool v6Only: false,
-      bool requestClientCertificate: false,
-      bool shared: false}) {
+      bool v6Only = false,
+      bool requestClientCertificate = false,
+      bool shared = false}) {
     if (backlog == null) backlog = 0;
 
     return _loopback(
@@ -143,7 +143,7 @@
       // Reuse the IPv4 server's port so that if [port] is 0, both servers use
       // the same ephemeral port.
       var v6Server = await bind(InternetAddress.loopbackIPv6, v4Server.port);
-      return new HttpMultiServer([v4Server, v6Server]);
+      return HttpMultiServer([v4Server, v6Server]);
     } on SocketException catch (error) {
       if (error.osError.errorCode != _addressInUseErrno) rethrow;
       if (port != 0) rethrow;
@@ -152,18 +152,18 @@
       // A port being available on IPv4 doesn't necessarily mean that the same
       // port is available on IPv6. If it's not (which is rare in practice),
       // we try again until we find one that's available on both.
-      v4Server.close();
+      await v4Server.close();
       return await _loopback(port, bind, remainingRetries - 1);
     }
   }
 
-  Future close({bool force: false}) =>
+  Future close({bool force = false}) =>
       Future.wait(_servers.map((server) => server.close(force: force)));
 
   /// Returns an HttpConnectionsInfo object summarizing the total number of
   /// current connections handled by all the servers.
   HttpConnectionsInfo connectionsInfo() {
-    var info = new HttpConnectionsInfo();
+    var info = HttpConnectionsInfo();
     for (var server in _servers) {
       var subInfo = server.connectionsInfo();
       info.total += subInfo.total;
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 3d24a03..2709dab 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -9,7 +9,7 @@
 final Future<bool> supportsIPv6 = () async {
   try {
     var socket = await ServerSocket.bind(InternetAddress.loopbackIPv6, 0);
-    socket.close();
+    await socket.close();
     return true;
   } on SocketException catch (_) {
     return false;
@@ -20,7 +20,7 @@
 final Future<bool> supportsIPv4 = () async {
   try {
     var socket = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
-    socket.close();
+    await socket.close();
     return true;
   } on SocketException catch (_) {
     return false;
diff --git a/pubspec.yaml b/pubspec.yaml
index 1bf6a8e..01fd07a 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -13,4 +13,5 @@
 
 dev_dependencies:
   http: ^0.12.0
+  pedantic: ^1.4.0
   test: ^1.5.2
diff --git a/test/http_multi_server_test.dart b/test/http_multi_server_test.dart
index 9c7becf..a61212e 100644
--- a/test/http_multi_server_test.dart
+++ b/test/http_multi_server_test.dart
@@ -13,15 +13,15 @@
 void main() {
   group("with multiple HttpServers", () {
     var multiServer;
-    var subServer1;
-    var subServer2;
-    var subServer3;
+    HttpServer subServer1;
+    HttpServer subServer2;
+    HttpServer subServer3;
     setUp(() {
       return Future.wait([
         HttpServer.bind("localhost", 0).then((server) => subServer1 = server),
         HttpServer.bind("localhost", 0).then((server) => subServer2 = server),
         HttpServer.bind("localhost", 0).then((server) => subServer3 = server)
-      ]).then((servers) => multiServer = new HttpMultiServer(servers));
+      ]).then((servers) => multiServer = HttpMultiServer(servers));
     });
 
     tearDown(() => multiServer.close());
@@ -127,8 +127,8 @@
 
     test("connectionsInfo sums the values for all servers", () {
       var pendingRequests = 0;
-      var awaitingResponseCompleter = new Completer();
-      var sendResponseCompleter = new Completer();
+      var awaitingResponseCompleter = Completer();
+      var sendResponseCompleter = Completer();
       multiServer.listen((request) {
         sendResponseCompleter.future.then((_) {
           request.response.write("got request");
@@ -159,7 +159,7 @@
   group("HttpMultiServer.loopback", () {
     var server;
     setUp(() {
-      return HttpMultiServer.loopback(0).then((server_) => server = server_);
+      return HttpMultiServer.loopback(0).then((s) => server = s);
     });
 
     tearDown(() => server.close());
