hapijs / hapi

The Simple, Secure Framework Developers Trust

Home Page:https://hapi.dev

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Node sockets timeout after 2 minutes by default

thsmale opened this issue · comments

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.