diff --git a/lib/Connection.js b/lib/Connection.js index 88a154ae6..feaa3ab23 100644 --- a/lib/Connection.js +++ b/lib/Connection.js @@ -113,7 +113,14 @@ class Connection { const onError = err => { cleanListeners() this._openRequests-- - callback(new ConnectionError(err.message), null) + let message = err.message + if (err.code === 'ECONNRESET') { + /* istanbul ignore next */ + const socket = request.socket || {} + /* istanbul ignore next */ + message += ` - Local: ${socket.localAddress || 'unknown'}:${socket.localPort || 'unknown'}, Remote: ${socket.remoteAddress || 'unknown'}:${socket.remotePort || 'unknown'}` + } + callback(new ConnectionError(message), null) } const onAbort = () => { diff --git a/test/unit/connection.test.js b/test/unit/connection.test.js index 5ba1c494a..a556564a0 100644 --- a/test/unit/connection.test.js +++ b/test/unit/connection.test.js @@ -1084,3 +1084,25 @@ test('getIssuerCertificate detects invalid/malformed certificates', t => { } t.equal(getIssuerCertificate(socket), null) }) + +test('Should show local/remote socket address in case of ECONNRESET', t => { + t.plan(2) + + function handler (req, res) { + res.destroy() + } + + buildServer(handler, ({ port }, server) => { + const connection = new Connection({ + url: new URL(`http://localhost:${port}`) + }) + connection.request({ + path: '/hello', + method: 'GET' + }, (err, res) => { + t.ok(err instanceof ConnectionError) + t.match(err.message, /socket\shang\sup\s-\sLocal:\s127.0.0.1:\d+,\sRemote:\s127.0.0.1:\d+/) + server.stop() + }) + }) +})