hapijs / hapi

The Simple, Secure Framework Developers Trust
https://hapi.dev
Other
14.59k stars 1.34k forks source link

Node sockets timeout after 2 minutes by default #4468

Open thsmale opened 11 months ago

thsmale commented 11 months ago

Context

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();
kanongil commented 11 months ago

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.