Prerequisites
Fastify version
4.12.0
Plugin version
No response
Node.js version
16.15.0
Operating system
Linux
Operating system version (i.e. 20.04, 11.3, 10)
Fedora 36
Description
No error/timeout hook is triggered if socket is closed.
When intentionally killing the socket of a request no fastify request hook (other than onSend) is triggered.
Steps to Reproduce
Basic server, logging when hooks are triggered
// CommonJs
const fastify = require("fastify")({
logger: true,
});
let requestStarted;
const getSecondsSinceRequestStarted = () => {
return (new Date(Date.now())).getSeconds()-requestStarted.getSeconds();
}
fastify.get("/", async (request, reply) => {
requestStarted = new Date(Date.now());
console.log(getSecondsSinceRequestStarted(),"s : Request recieved");
request.raw.on("close", (data) => {
console.log(getSecondsSinceRequestStarted(),"s : node event close");
});
await new Promise((resolve) => setTimeout(resolve, 5 * 1000));
return { hello: "world" };
});
fastify.addHook("onError", async () => {
console.log(getSecondsSinceRequestStarted(),"s : onError");
});
fastify.addHook("onResponse", async () => {
console.log(getSecondsSinceRequestStarted(),"s : onResponse");
});
fastify.addHook("onSend", async (data, test) => {
console.log(getSecondsSinceRequestStarted(),"s : onSend");
});
fastify.addHook("onTimeout", async () => {
console.log(getSecondsSinceRequestStarted(),"s : onTimeout");
});
const start = async () => {
try {
await fastify.listen({ port: 1111 });
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();
Seperate small script intentionally killing the socket before request is finsihed
const http = require("http");
const start = async () => {
const res = http.get({ hostname: "localhost", port: 1111, path: "/" });
await new Promise((resolve) => setTimeout(resolve, 1 * 1000));
console.log("Destroying socket");
res.destroy();
}
start();
Stdout of fastify server
0 s : Request recieved
1 s : node event close
5 s : onSend
Expected Behavior
Some request hook other than onSend triggering.
Prerequisites
Fastify version
4.12.0
Plugin version
No response
Node.js version
16.15.0
Operating system
Linux
Operating system version (i.e. 20.04, 11.3, 10)
Fedora 36
Description
No error/timeout hook is triggered if socket is closed.
When intentionally killing the socket of a request no fastify request hook (other than onSend) is triggered.
Steps to Reproduce
Basic server, logging when hooks are triggered
Seperate small script intentionally killing the socket before request is finsihed
Stdout of fastify server
Expected Behavior
Some request hook other than
onSendtriggering.