Test that IPv6 sockets get closed (fe5dc3513b2c673bdfdc779b3ea2035ba13dd5e4) (#457)

diff --git a/packages/multicast_dns/CHANGELOG.md b/packages/multicast_dns/CHANGELOG.md
index f70ebf8..426f0b0 100644
--- a/packages/multicast_dns/CHANGELOG.md
+++ b/packages/multicast_dns/CHANGELOG.md
@@ -1,4 +1,9 @@
+## 0.3.1
+
+* Close IPv6 sockets on [MDnsClient.stop].
+
 ## 0.3.0+1
+
 * Removed redundant link in README.md file.
 
 ## 0.3.0
diff --git a/packages/multicast_dns/pubspec.yaml b/packages/multicast_dns/pubspec.yaml
index 0a11ff5..2d24824 100644
--- a/packages/multicast_dns/pubspec.yaml
+++ b/packages/multicast_dns/pubspec.yaml
@@ -2,7 +2,7 @@
 description: Dart package for mDNS queries (e.g. Bonjour, Avahi).
 repository: https://github.com/flutter/packages/tree/master/packages/multicast_dns
 issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+multicast_dns%22
-version: 0.3.0+1
+version: 0.3.1
 
 environment:
   sdk: ">=2.12.0 <3.0.0"
diff --git a/packages/multicast_dns/test/client_test.dart b/packages/multicast_dns/test/client_test.dart
index bd592f3..4c49fcb 100644
--- a/packages/multicast_dns/test/client_test.dart
+++ b/packages/multicast_dns/test/client_test.dart
@@ -29,11 +29,50 @@
 
     expect(lastPort, 1234);
   });
+
+  test('Closes IPv4 sockets', () async {
+    final FakeRawDatagramSocket datagramSocket = FakeRawDatagramSocket();
+    final MDnsClient client = MDnsClient(rawDatagramSocketFactory:
+        (dynamic host, int port,
+            {bool reuseAddress = true,
+            bool reusePort = true,
+            int ttl = 1}) async {
+      return datagramSocket;
+    });
+
+    await client.start(
+        mDnsPort: 1234,
+        interfacesFactory: (InternetAddressType type) async =>
+            <NetworkInterface>[]);
+    expect(datagramSocket.closed, false);
+    client.stop();
+    expect(datagramSocket.closed, true);
+  });
+
+  test('Closes IPv6 sockets', () async {
+    final FakeRawDatagramSocket datagramSocket = FakeRawDatagramSocket();
+    datagramSocket.address = InternetAddress.anyIPv6;
+    final MDnsClient client = MDnsClient(rawDatagramSocketFactory:
+        (dynamic host, int port,
+            {bool reuseAddress = true,
+            bool reusePort = true,
+            int ttl = 1}) async {
+      return datagramSocket;
+    });
+
+    await client.start(
+        mDnsPort: 1234,
+        interfacesFactory: (InternetAddressType type) async =>
+            <NetworkInterface>[]);
+    expect(datagramSocket.closed, false);
+    client.stop();
+    expect(datagramSocket.closed, true);
+  });
 }
 
 class FakeRawDatagramSocket extends Fake implements RawDatagramSocket {
   @override
-  InternetAddress get address => InternetAddress.anyIPv4;
+  InternetAddress address = InternetAddress.anyIPv4;
 
   @override
   StreamSubscription<RawSocketEvent> listen(
@@ -44,4 +83,11 @@
     return const Stream<RawSocketEvent>.empty().listen(onData,
         onError: onError, cancelOnError: cancelOnError, onDone: onDone);
   }
+
+  bool closed = false;
+
+  @override
+  void close() {
+    closed = true;
+  }
 }