Http client sometimes returns EPIPE when server does not read request body
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- JavaScript
- Estrellas
- 122k
- Forks
- 37.3k
- Merge medio
- 4 d 2 h
- PR fusionados (30 d)
- 283
Descripción
- Version: v15.12.0
- Platform: Darwin Kernel Version 20.3.0
What steps will reproduce the bug?
let http = require("http");
let server = http.createServer(async function(req, res)
{
res.end("ok");
});
(async function()
{
await new Promise(resolve => server.listen(resolve));
let buf = Buffer.alloc(50000000);
for(let i = 0; ; i++)
{
let req = http.request({ port: server.address().port, method: "post" }).end(buf);
let res = await new Promise((resolve, reject) => req.on("response", resolve).on("error", reject));
let str = "";
for await (let chunk of res) str += chunk;
console.log(i, "client received:", str);
}
}());
How often does it reproduce? Is there a required condition?
Sometimes. It can take a few thousands of iterations or more.
What is the expected behavior?
No EPIPE.
What do you see instead?
85784 client received: ok
node:internal/process/promises:245
triggerUncaughtException(err, true /* fromPromise */);
^
Error: write EPIPE
at WriteWrap.onWriteComplete [as oncomplete] (node:internal/stream_base_commons:94:16) {
errno: -32,
code: 'EPIPE',
syscall: 'write'
}
Additional information
It does not happen on linux (after more than million iterations).
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza ejecutando en Darwin la reproducción proporcionada de cliente/servidor HTTP y compara su comportamiento con Linux. La carga útil no indica ningún archivo fuente ni prueba, así que sigue la ruta de escritura del cuerpo de la solicitud del cliente HTTP asociada con EPIPE e identifica una prueba de regresión específica. Se considera terminado cuando la reproducción ya no produce EPIPE mientras el servidor no lee el cuerpo de la solicitud.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript, node.js
- Área
- backend, networking
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 42/100