From 73b29d79b96e2db853ef38c59d76d136f45caeae Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Mon, 11 Oct 2010 23:19:44 -0500 Subject: [PATCH] Don't flush net writeQueue on end() if its still connecting --- lib/net.js | 4 ++- test/simple/test-net-connect-buffer.js | 47 ++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 test/simple/test-net-connect-buffer.js diff --git a/lib/net.js b/lib/net.js index 92fbb5b9b2..38ee1128e5 100644 --- a/lib/net.js +++ b/lib/net.js @@ -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 index 0000000000..80198bea08 --- /dev/null +++ b/test/simple/test-net-connect-buffer.js @@ -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); +}