diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js index 551fb7a8819fe2..432d21ba4b309d 100644 --- a/lib/_tls_wrap.js +++ b/lib/_tls_wrap.js @@ -1299,6 +1299,7 @@ exports.connect = function connect(...args) { host: options.host, family: options.family, localAddress: options.localAddress, + localPort: options.localPort, lookup: options.lookup }; diff --git a/test/parallel/test-https-connect-localport.js b/test/parallel/test-https-connect-localport.js new file mode 100644 index 00000000000000..fc9e11f27e7188 --- /dev/null +++ b/test/parallel/test-https-connect-localport.js @@ -0,0 +1,32 @@ +'use strict'; +const common = require('../common'); +const fixtures = require('../common/fixtures'); + +if (!common.hasCrypto) + common.skip('missing crypto'); + +const https = require('https'); +const assert = require('assert'); + +{ + https.createServer({ + cert: fixtures.readKey('agent1-cert.pem'), + key: fixtures.readKey('agent1-key.pem'), + }, common.mustCall(function(req, res) { + this.close(); + res.end(); + })).listen(0, common.localhostIPv4, common.mustCall(function() { + const port = this.address().port; + const req = https.get({ + host: common.localhostIPv4, + pathname: '/', + port, + family: 4, + localPort: 34567, + rejectUnauthorized: false + }, common.mustCall(() => { + assert.strictEqual(req.socket.localPort, 34567); + assert.strictEqual(req.socket.remotePort, port); + })); + })); +}