diff --git a/lib/net.js b/lib/net.js index d7f3eae03914fc..f778043572362e 100644 --- a/lib/net.js +++ b/lib/net.js @@ -817,6 +817,8 @@ function connect(self, address, port, addressType, localAddress, localPort) { req.oncomplete = afterConnect; req.address = address; req.port = port; + req.localAddress = localAddress; + req.localPort = localPort; if (addressType === 4) err = self._handle.connect(req, address, port); @@ -1056,15 +1058,17 @@ function afterConnect(status, handle, req, readable, writable) { self._connecting = false; var details; if (req.localAddress && req.localPort) { - ex.localAddress = req.localAddress; - ex.localPort = req.localPort; - details = ex.localAddress + ':' + ex.localPort; + details = req.localAddress + ':' + req.localPort; } var ex = exceptionWithHostPort(status, 'connect', req.address, req.port, details); + if (details) { + ex.localAddress = req.localAddress; + ex.localPort = req.localPort; + } self._destroy(ex); } } diff --git a/test/parallel/test-net-connect-local-error.js b/test/parallel/test-net-connect-local-error.js new file mode 100644 index 00000000000000..197b283bdf3621 --- /dev/null +++ b/test/parallel/test-net-connect-local-error.js @@ -0,0 +1,15 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const net = require('net'); + +var client = net.connect({ + port: common.PORT + 1, + localPort: common.PORT, + localAddress: common.localhostIPv4 +}); + +client.on('error', common.mustCall(function onError(err) { + assert.equal(err.localPort, common.PORT); + assert.equal(err.localAddress, common.localhostIPv4); +}));