#4468·hapi

Node sockets timeout after 2 minutes by default

Author: thsmaleCreated Oct 20, 2023Updated Nov 17, 2024
Labelsdocumentation

Context

  • node version: node14/18
  • module version: hapi16/20

What are you trying to achieve or the steps to reproduce ?

This server 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.

javascript
'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();