Skip to content

Commit

Permalink
net: migrate errors to internal/errors
Browse files Browse the repository at this point in the history
Throw ERR_SOCKET_CLOSED and ERR_SERVER_NOT_RUNNING
instead of the old-style errors in net.js.

PR-URL: #17766
Refs: #17709
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
kysnm authored and joyeecheung committed Dec 23, 2017
1 parent 8599465 commit b98aaa3
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 13 deletions.
9 changes: 8 additions & 1 deletion doc/api/errors.md
Original file line number Diff line number Diff line change
Expand Up @@ -1364,7 +1364,14 @@ Script execution was interrupted by `SIGINT` (For example, when Ctrl+C was press

The [`server.listen()`][] method was called while a `net.Server` was already
listening. This applies to all instances of `net.Server`, including HTTP, HTTPS,
and HTTP/2 Server instances.
and HTTP/2 `Server` instances.

<a id="ERR_SERVER_NOT_RUNNING"></a>
### ERR_SERVER_NOT_RUNNING

The [`server.close()`][] method was called when a `net.Server` was not
running. This applies to all instances of `net.Server`, including HTTP, HTTPS,
and HTTP/2 `Server` instances.

<a id="ERR_SOCKET_ALREADY_BOUND"></a>
### ERR_SOCKET_ALREADY_BOUND
Expand Down
1 change: 1 addition & 0 deletions lib/internal/errors.js
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,7 @@ E('ERR_SCRIPT_EXECUTION_INTERRUPTED',
'Script execution was interrupted by `SIGINT`.');
E('ERR_SERVER_ALREADY_LISTEN',
'Listen method has been called more than once without closing.');
E('ERR_SERVER_NOT_RUNNING', 'Server is not running.');
E('ERR_SOCKET_ALREADY_BOUND', 'Socket is already bound');
E('ERR_SOCKET_BAD_BUFFER_SIZE', 'Buffer size must be a positive integer');
E('ERR_SOCKET_BAD_PORT', 'Port should be > 0 and < 65536. Received %s.');
Expand Down
4 changes: 2 additions & 2 deletions lib/net.js
Original file line number Diff line number Diff line change
Expand Up @@ -744,7 +744,7 @@ Socket.prototype._writeGeneric = function(writev, data, encoding, cb) {
this._unrefTimer();

if (!this._handle) {
this.destroy(new Error('This socket is closed'), cb);
this.destroy(new errors.Error('ERR_SOCKET_CLOSED'), cb);
return false;
}

Expand Down Expand Up @@ -1645,7 +1645,7 @@ Server.prototype.close = function(cb) {
if (typeof cb === 'function') {
if (!this._handle) {
this.once('close', function close() {
cb(new Error('Not running'));
cb(new errors.Error('ERR_SERVER_NOT_RUNNING'));
});
} else {
this.once('close', cb);
Expand Down
6 changes: 4 additions & 2 deletions test/parallel/test-http-unix-socket.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,10 @@ server.listen(common.PIPE, common.mustCall(function() {
assert.strictEqual(res.body, 'hello world\n');
server.close(common.mustCall(function(error) {
assert.strictEqual(error, undefined);
server.close(common.mustCall(function(error) {
assert.strictEqual(error && error.message, 'Not running');
server.close(common.expectsError({
code: 'ERR_SERVER_NOT_RUNNING',
message: 'Server is not running.',
type: Error
}));
}));
}));
Expand Down
13 changes: 9 additions & 4 deletions test/parallel/test-net-socket-destroy-send.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,16 @@ server.listen(0, common.mustCall(function() {
conn.on('connect', common.mustCall(function() {
// Test destroy returns this, even on multiple calls when it short-circuits.
assert.strictEqual(conn, conn.destroy().destroy());
conn.on('error', common.mustCall(function(err) {
assert.strictEqual(err.message, 'This socket is closed');
conn.on('error', common.expectsError({
code: 'ERR_SOCKET_CLOSED',
message: 'Socket is closed',
type: Error
}));
conn.write(Buffer.from('kaboom'), common.mustCall(function(err) {
assert.strictEqual(err.message, 'This socket is closed');

conn.write(Buffer.from('kaboom'), common.expectsError({
code: 'ERR_SOCKET_CLOSED',
message: 'Socket is closed',
type: Error
}));
server.close();
}));
Expand Down
11 changes: 7 additions & 4 deletions test/parallel/test-net-socket-write-after-close.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,14 @@ const net = require('net');
server.listen(common.mustCall(() => {
const port = server.address().port;
const client = net.connect({ port }, common.mustCall(() => {
client.on('error', common.mustCall((err) => {
server.close();
assert.strictEqual(err.constructor, Error);
assert.strictEqual(err.message, 'This socket is closed');
client.on('error', common.expectsError({
code: 'ERR_SOCKET_CLOSED',
message: 'Socket is closed',
type: Error
}));

server.close();

client._handle.close();
client._handle = null;
client.write('foo');
Expand Down

0 comments on commit b98aaa3

Please sign in to comment.