net: don't throw on net.Server.close()
When close() is called on a non-listening server, a synchronous error is thrown. This commit causes the error to be passed to the asynchronous callback function instead. Signed-off-by: Fedor Indutny <fedor@indutny.com>
This commit is contained in:
parent
655ec2113a
commit
f1dc55d701
@ -206,7 +206,8 @@ Stops the server from accepting new connections and keeps existing
|
||||
connections. This function is asynchronous, the server is finally
|
||||
closed when all connections are ended and the server emits a `'close'`
|
||||
event. Optionally, you can pass a callback to listen for the `'close'`
|
||||
event.
|
||||
event. If present, the callback is invoked with any potential error
|
||||
as the first and only argument.
|
||||
|
||||
### server.address()
|
||||
|
||||
|
18
lib/net.js
18
lib/net.js
@ -1341,16 +1341,20 @@ Server.prototype.close = function(cb) {
|
||||
self._emitCloseIfDrained();
|
||||
}
|
||||
|
||||
if (!this._handle) {
|
||||
// Throw error. Follows net_legacy behaviour.
|
||||
throw new Error('Not running');
|
||||
if (cb) {
|
||||
if (!this._handle) {
|
||||
this.once('close', function() {
|
||||
cb(new Error('Not running'));
|
||||
});
|
||||
} else {
|
||||
this.once('close', cb);
|
||||
}
|
||||
}
|
||||
|
||||
if (cb) {
|
||||
this.once('close', cb);
|
||||
if (this._handle) {
|
||||
this._handle.close();
|
||||
this._handle = null;
|
||||
}
|
||||
this._handle.close();
|
||||
this._handle = null;
|
||||
|
||||
if (this._usingSlaves) {
|
||||
var self = this,
|
||||
|
@ -62,7 +62,12 @@ server.listen(common.PIPE, function() {
|
||||
res.on('end', function() {
|
||||
assert.equal(res.body, 'hello world\n');
|
||||
body_ok = true;
|
||||
server.close();
|
||||
server.close(function(error) {
|
||||
assert.equal(error, undefined);
|
||||
server.close(function(error) {
|
||||
assert.equal(error && error.message, 'Not running');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -79,9 +84,4 @@ process.on('exit', function() {
|
||||
assert.ok(status_ok);
|
||||
assert.ok(headers_ok);
|
||||
assert.ok(body_ok);
|
||||
|
||||
// Double close should throw. Follows net_legacy behaviour.
|
||||
assert.throws(function() {
|
||||
server.close();
|
||||
});
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user