diff --git a/runtime/bin/socket_patch.dart b/runtime/bin/socket_patch.dart
index b46bf5e..f31975e 100644
--- a/runtime/bin/socket_patch.dart
+++ b/runtime/bin/socket_patch.dart
@@ -1068,7 +1068,15 @@
         .then((socket) => new _RawServerSocket(socket));
   }
 
-  _RawServerSocket(this._socket) {
+  _RawServerSocket(this._socket);
+
+  StreamSubscription<RawSocket> listen(void onData(RawSocket event),
+                                       {Function onError,
+                                        void onDone(),
+                                        bool cancelOnError}) {
+    if (_controller != null) {
+      throw new StateError("Stream was already listened to");
+    }
     var zone = Zone.current;
     _controller = new StreamController(sync: true,
         onListen: _onSubscriptionStateChange,
@@ -1087,14 +1095,7 @@
         _controller.addError(e);
         _controller.close();
       }),
-      destroyed: _controller.close
-    );
-  }
-
-  StreamSubscription<RawSocket> listen(void onData(RawSocket event),
-                                       {Function onError,
-                                        void onDone(),
-                                        bool cancelOnError}) {
+      destroyed: _controller.close);
     return _controller.stream.listen(
         onData,
         onError: onError,
diff --git a/tests/standalone/io/http_server_test.dart b/tests/standalone/io/http_server_test.dart
index 4eb8df5..f664501 100644
--- a/tests/standalone/io/http_server_test.dart
+++ b/tests/standalone/io/http_server_test.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import "dart:async";
+import "dart:typed_data";
 import "dart:io";
 
 import "package:async_helper/async_helper.dart";
@@ -110,8 +111,34 @@
 }
 
 
+void testHttpServerClientClose() {
+  HttpServer.bind("127.0.0.1", 0).then((server) {
+    runZoned(() {
+      server.listen((request) {
+        request.response.bufferOutput = false;
+        request.response.add(new Uint8List(64 * 1024));
+        new Timer(const Duration(milliseconds: 100), () {
+          request.response.close().then((_) {
+            server.close();
+          });
+        });
+      });
+    }, onError: (e, s) {
+      Expect.fail("Unexpected error: $e(${e.hashCode})\n$s");
+    });
+    var client = new HttpClient();
+    client.get("127.0.0.1", server.port, "/")
+        .then((request) => request.close())
+        .then((response) {
+          response.listen((_) {}).cancel();
+        });
+  });
+}
+
+
 void main() {
   testListenOn();
   testHttpServerZone();
   testHttpServerZoneError();
+  testHttpServerClientClose();
 }
diff --git a/tools/VERSION b/tools/VERSION
index bc7988f..3316975 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -26,6 +26,6 @@
 CHANNEL stable
 MAJOR 1
 MINOR 3
-PATCH 3
+PATCH 4
 PRERELEASE 0
 PRERELEASE_PATCH 0
