add test
diff --git a/lib/server/sse_handler.dart b/lib/server/sse_handler.dart
index abec5cf..07e9a78 100644
--- a/lib/server/sse_handler.dart
+++ b/lib/server/sse_handler.dart
@@ -88,7 +88,7 @@
 
   void close() {
     if (!_connectionController.isClosed) _connectionController.close();
-    for (var connection in _connections) {
+    for (var connection in _connections.toList()) {
       connection.sink.close();
       _connections.remove(connection);
     }
@@ -101,8 +101,12 @@
       var clientId = req.url.queryParameters['sseClientId'];
       var connection = SseConnection(sink, clientId);
       _connections.add(connection);
-      // Remove connection when it is remotely closed.
-      channel.stream.listen((_) {}, onDone: () {
+      // Remove connection when it is remotely closed or the stream is
+      // cancelled.
+      channel.stream.listen((_) {
+        // SSE is unidirectional. Responses are handled through POST requests.
+      }, onDone: () {
+        // Trigger closing the connection.
         connection.sink.close();
         _connections.remove(connection);
       });
diff --git a/test/sse_test.dart b/test/sse_test.dart
index a9db7d9..c21345e 100644
--- a/test/sse_test.dart
+++ b/test/sse_test.dart
@@ -83,7 +83,31 @@
     var closeButton = await webdriver.findElement(const By.tagName('button'));
     await closeButton.click();
 
-    // Stream should complete.
+    // Should complete since the connection is closed.
+    await connection.stream.toList();
+    expect(handler.numberOfClients, 0);
+  });
+
+  test('Cancelling the listener closes the conneciton', () async {
+    expect(handler.numberOfClients, 0);
+    await webdriver.get('http://localhost:${server.port}');
+    var connection = await handler.connections.next;
+    expect(handler.numberOfClients, 1);
+
+    var sub = connection.stream.listen((_) {});
+    await sub.cancel();
+    await pumpEventQueue();
+    expect(handler.numberOfClients, 0);
+  });
+
+  test('Can close the handler which closes the connections', () async {
+    expect(handler.numberOfClients, 0);
+    await webdriver.get('http://localhost:${server.port}');
+    var connection = await handler.connections.next;
+    expect(handler.numberOfClients, 1);
+
+    handler.close();
+    // Should complete since the connection is closed.
     await connection.stream.toList();
     expect(handler.numberOfClients, 0);
   });