Don't flush net writeQueue on end() if its still connecting
authorJoshua Peek <josh@joshpeek.com>
Tue, 12 Oct 2010 04:19:44 +0000 (23:19 -0500)
committerRyan Dahl <ry@tinyclouds.org>
Wed, 13 Oct 2010 09:37:53 +0000 (02:37 -0700)
lib/net.js
test/simple/test-net-connect-buffer.js [new file with mode: 0644]

index 92fbb5b..38ee112 100644 (file)
@@ -1032,7 +1032,9 @@ Stream.prototype.end = function (data, encoding) {
     if (data) this.write(data, encoding);
     if (this._writeQueueLast() !== END_OF_FILE) {
       this._writeQueue.push(END_OF_FILE);
-      this.flush();
+      if (!this._connecting) {
+        this.flush();
+      }
     }
   }
 };
diff --git a/test/simple/test-net-connect-buffer.js b/test/simple/test-net-connect-buffer.js
new file mode 100644 (file)
index 0000000..80198be
--- /dev/null
@@ -0,0 +1,47 @@
+var common = require('../common');
+var assert = require('assert');
+var net = require('net');
+
+var tcpPort = common.PORT;
+
+var tcp = net.Server(function (s) {
+  tcp.close();
+
+  console.log("tcp server connection");
+
+  var buf = "";
+  s.on('data', function (d) {
+    buf += d;
+  });
+
+  s.on('end', function () {
+    assert.equal("foobar", buf);
+    console.log("tcp socket disconnect");
+    s.end();
+  });
+
+  s.on('error', function (e) {
+    console.log("tcp server-side error: " + e.message);
+    process.exit(1);
+  });
+});
+tcp.listen(tcpPort, startClient);
+
+function startClient () {
+  var socket = net.Stream();
+
+  console.log("Connecting to socket");
+
+  socket.connect(tcpPort);
+
+  socket.on('connect', function () {
+    console.log('socket connected');
+  });
+
+  assert.equal("opening", socket.readyState);
+
+  assert.equal(false, socket.write("foo"));
+  socket.end("bar");
+
+  assert.equal("opening", socket.readyState);
+}