Closed
Description
Version
v16.7.0
Platform
Linux e332ae582690 5.10.47-linuxkit #1 SMP Sat Jul 3 21:51:47 UTC 2021 x86_64 Linux
Subsystem
No response
What steps will reproduce the bug?
Start a server and client using the following scripts:
server.js
:
const http = require('http')
http.createServer((req, res) => {
res.writeHead(200, {'Content-Type': 'text/plain'})
res.end('ok')
}).listen('sock.sock')
client.js
:
const http = require('http')
;(async () => {
for (let i = 0; i < 1e4; i++) {
const result = await new Promise((resolve, reject) => {
const request = http.request({
method: 'POST',
socketPath: 'sock.sock',
headers: {
'Content-Length': 2
}
}, (resp) => {
resp.statusCode === 200 ? resolve('ok') : reject(new Error(resp.statusCode))
})
request.write('{}', null, () => {
request.end()
})
})
console.log(i, result)
}
console.log('done')
})()
On v16.7.0
, this leads to an EPIPE
error after a few hundred requests. On v16.6.2
, it does not hit an EPIPE
error after many thousands of requests.
A full Docker Linux reproduction is here: https://github.com/mhassan1/node-16-7-0-request-epipe
How often does it reproduce? Is there a required condition?
It reproduces every time within a few hundred requests.
What is the expected behavior?
No EPIPE
.
What do you see instead?
EPIPE
after a few hundred requests:
node:events:371
throw er; // Unhandled 'error' event
^
Error: write EPIPE
at afterWriteDispatched (node:internal/stream_base_commons:164:15)
at writeGeneric (node:internal/stream_base_commons:155:3)
at Socket._writeGeneric (node:net:780:11)
at Socket._write (node:net:792:8)
at writeOrBuffer (node:internal/streams/writable:389:12)
at _write (node:internal/streams/writable:330:10)
at Socket.Writable.write (node:internal/streams/writable:334:10)
at ClientRequest._writeRaw (node:_http_outgoing:362:17)
at ClientRequest._send (node:_http_outgoing:338:15)
at ClientRequest.end (node:_http_outgoing:880:10)
Emitted 'error' event on ClientRequest instance at:
at Socket.socketErrorListener (node:_http_client:447:9)
at Socket.emit (node:events:394:28)
at emitErrorNT (node:internal/streams/destroy:157:8)
at emitErrorCloseNT (node:internal/streams/destroy:122:3)
at processTicksAndRejections (node:internal/process/task_queues:83:21) {
errno: -32,
code: 'EPIPE',
syscall: 'write'
}
Additional information
- This issue is visible when using axios with follow-redirects
- This may be the same underlying issue as Simple
http
proxy withsocketPath
leads toEPIPE
error #40553 - This does not reproduce when making requests on a port
- This reproduces on
v14.18.0
but notv14.17.6