Skip to content
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.

Commit

Permalink
net: fix 'close' event emit order
Browse files Browse the repository at this point in the history
The server 'close' event was emitted before the last client 'close' event. Not
exactly fatal but potentially confusing.

Before this commit the order looked something like [client, server, client],
now it looks like [client, client, server].

See #3340 for more details.
  • Loading branch information
bnoordhuis committed May 29, 2012
1 parent 8a411ba commit fa9aa1c
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 15 deletions.
10 changes: 5 additions & 5 deletions lib/net.js
Expand Up @@ -342,11 +342,6 @@ Socket.prototype._destroy = function(exception, cb) {

timers.unenroll(this);

if (this.server) {
this.server._connections--;
this.server._emitCloseIfDrained();
}

debug('close');
if (this._handle) {
this._handle.close();
Expand All @@ -361,6 +356,11 @@ Socket.prototype._destroy = function(exception, cb) {
});

this.destroyed = true;

if (this.server) {
this.server._connections--;
this.server._emitCloseIfDrained();
}
};


Expand Down
34 changes: 24 additions & 10 deletions test/simple/test-net-server-close.js
Expand Up @@ -19,22 +19,36 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.




var common = require('../common');
var assert = require('assert');
var net = require('net');

var server = net.createServer(function(socket) {
server.close(function() {
assert.equal(server.connections, 0);
});
process.nextTick(function() {
socket.destroy();
var events = [];
var sockets = [];

process.on('exit', function() {
assert.equal(server.connections, 0);
assert.deepEqual(events, 'client client server'.split(' '));
});

var server = net.createServer(function(c) {
c.on('close', function() {
events.push('client');
});

sockets.push(c);

if (sockets.length === 2) {
server.close();
sockets.forEach(function(c) { c.destroy() });
}
});

server.on('close', function() {
events.push('server');
});

server.listen(common.PORT, function() {
net.createConnection(common.PORT);
});
net.createConnection(common.PORT);
});

0 comments on commit fa9aa1c

Please sign in to comment.