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

Commit 7def1f0

Browse files
committed
net: include local port/address in error messages
1 parent 81edc26 commit 7def1f0

File tree

1 file changed

+83
-32
lines changed

1 file changed

+83
-32
lines changed

lib/net.js

Lines changed: 83 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -809,18 +809,29 @@ function connect(self, address, port, addressType, localAddress, localPort) {
809809
err = bind(localAddress, localPort);
810810

811811
if (err) {
812-
var details = util.format('%s:%s', address, port || '');
813812
var additions = {
814813
address: address
815814
};
816-
if (port) additions.port = port;
815+
var details;
816+
if (port) {
817+
details = util.format('%s:%s', address, port);
818+
additions.port = port;
819+
} else {
820+
details = address;
821+
}
817822
var ex = errnoException(err, 'bind', details, additions);
818823
self._destroy(ex);
819824
return;
820825
}
821826
}
822827

823-
var req = { oncomplete: afterConnect };
828+
var req = {
829+
oncomplete: afterConnect,
830+
port: undefined,
831+
address: undefined,
832+
localAddress: undefined,
833+
localPort: undefined
834+
};
824835
if (addressType === 6 || addressType === 4) {
825836
port = port | 0;
826837
if (port <= 0 || port > 65535)
@@ -838,13 +849,16 @@ function connect(self, address, port, addressType, localAddress, localPort) {
838849
err = self._handle.connect(req, address, afterConnect);
839850
}
840851

852+
self._getsockname();
853+
if (self._sockname) {
854+
req.localAddress = self._sockname.address;
855+
req.localPort = self._sockname.port;
856+
}
841857
if (err) {
842-
var details = util.format('%s:%s', address, port || '');
843-
var additions = {
844-
address: address
845-
};
846-
if (port) additions.port = port;
847-
var ex = errnoException(err, 'connect', details, additions);
858+
var details = port ?
859+
util.format('%s:%s', address, port) :
860+
address;
861+
var ex = errnoException(err, 'connect', details, req);
848862
self._destroy(ex);
849863
}
850864
}
@@ -928,8 +942,15 @@ Socket.prototype.connect = function(options, cb) {
928942
// There are no event listeners registered yet so defer the
929943
// error event to the next tick.
930944
process.nextTick(function() {
931-
if (options.port) err.port = options.port;
932-
self.emit('error', err);
945+
// The errno may not be recognized by libuv
946+
var ex = util._extend(err, options);
947+
var message = util.format('%s %s %s:%s',
948+
err.syscall,
949+
err.errno,
950+
options.host,
951+
options.port);
952+
ex.message = message;
953+
self.emit('error', ex);
933954
self._destroy();
934955
});
935956
} else {
@@ -996,12 +1017,17 @@ function afterConnect(status, handle, req, readable, writable) {
9961017

9971018
} else {
9981019
self._connecting = false;
999-
var details = util.format('%s:%s', req.address, req.port || '');
1000-
var additions = {
1001-
address: req.address
1002-
};
1003-
if (req.port) additions.port = req.port;
1004-
var ex = errnoException(status, 'connect', details, additions);
1020+
var details = req.port ?
1021+
util.format('%s:%s', req.address, req.port) :
1022+
req.address;
1023+
1024+
if (req.localAddress && req.localPort) {
1025+
details = util.format('%s - Local (%s:%s)',
1026+
details,
1027+
req.localAddress,
1028+
req.localPort);
1029+
}
1030+
var ex = errnoException(status, 'connect', details, req);
10051031
self._destroy(ex);
10061032
}
10071033
}
@@ -1130,11 +1156,20 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
11301156
debug('_listen2: create a handle');
11311157
var rval = createServerHandle(address, port, addressType, fd);
11321158
if (util.isNumber(rval)) {
1133-
var details = util.format('%s:%s', address, port > 0 ? port : '');
1134-
var additions = {
1135-
address: address
1136-
};
1137-
if (port > 0) additions.port = port;
1159+
var details, additions;
1160+
if (port > 0) {
1161+
details = util.format('%s:%s', address, port);
1162+
additions = {
1163+
address: address,
1164+
port: port
1165+
};
1166+
} else {
1167+
details = address;
1168+
additions = {
1169+
address: address
1170+
};
1171+
}
1172+
11381173
var error = errnoException(rval, 'listen', details, additions);
11391174
process.nextTick(function() {
11401175
self.emit('error', error);
@@ -1152,11 +1187,19 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
11521187
var err = _listen(self._handle, backlog);
11531188

11541189
if (err) {
1155-
var details = util.format('%s:%s', address, port > 0 ? port : '');
1156-
var additions = {
1157-
address: address
1158-
};
1159-
if (port > 0) additions.port = port;
1190+
var details, additions;
1191+
if (port > 0) {
1192+
details = util.format('%s:%s', address, port);
1193+
additions = {
1194+
address: address,
1195+
port: port
1196+
};
1197+
} else {
1198+
details = address;
1199+
additions = {
1200+
address: address
1201+
};
1202+
}
11601203
var ex = errnoException(err, 'listen', details, additions);
11611204
self._handle.close();
11621205
self._handle = null;
@@ -1204,11 +1247,19 @@ function listen(self, address, port, addressType, backlog, fd) {
12041247
}
12051248

12061249
if (err) {
1207-
var details = util.format('%s:%s', address, port > 0 ? port : '');
1208-
var additions = {
1209-
address: address
1210-
};
1211-
if (port > 0) additions.port = port;
1250+
var details, additions;
1251+
if (port > 0) {
1252+
details = util.format('%s:%s', address, port);
1253+
additions = {
1254+
address: address,
1255+
port: port
1256+
};
1257+
} else {
1258+
details = address;
1259+
additions = {
1260+
address: address
1261+
};
1262+
}
12121263
var ex = errnoException(err, 'bind', details, additions);
12131264
return self.emit('error', ex);
12141265
}

0 commit comments

Comments
 (0)