hapi
hapi copied to clipboard
Node sockets timeout after 2 minutes by default
Context
- node version: node14/18
- module version: hapi16/20
What are you trying to achieve or the steps to reproduce ?
This sever uses the default implementation of route.options.timeout.socket
which states node sockets will timeout after 2 minutes. However, the route handler has a 3 minute timeout, but the socket never hangs up after 2 minutes as expected.
'use strict';
const Hapi = require('@hapi/hapi');
const init = async () => {
const server = Hapi.server({
port: 4545,
host: 'localhost'
});
/**
* expecting default behavior that node socket hangs up after 2 minutes
* however this timer exceeds 2 minutes then response is returned to user
*/
server.route({
method: 'GET',
path: '/default-socket-timeout',
handler: async (request, h) => {
const timeout = delay => new Promise(resolve => setTimeout(resolve, delay));
await timeout(180 * 1000);
return 'timer is done';
}
});
await server.start();
console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
This sounds like a documentation issue.
The node default timeout for http server.timeout was changed in v13.0.0 to never timeout, according to the history entry.