diff --git a/lib/net.js b/lib/net.js index 92fbb5b9b26..38ee1128e54 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 00000000000..80198bea082 --- /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); +}