http-party / http-server

a simple zero-configuration command-line http server
MIT License
13.42k stars 1.48k forks source link

Receives SIGTERM during "DDoS" #821

Open Maxim-Mazurok opened 2 years ago

Maxim-Mazurok commented 2 years ago

Environment Versions

  1. OS Type: Windows 11
  2. Node version: $ node --version v16.3.0
  3. http-server version: $ http-server --version v14.1.0

Steps to reproduce

  1. Run this code:

      const serveProcess = childProcess.exec('http-server -a :: -p 3000 -c-1 ./dist');
    
      serveProcess.stdout.on('data', (data) => {
          console.log(data);
      });
    
      serveProcess.stderr.on('data', (data) => {
          console.error(data);
      });
    
      serveProcess.on('close', (code, signal) => {
          console.log(`Server process closed with code ${code} or signal ${signal}`);
          process.exit();
      });
      serveProcess.on('exit', (code, signal) => {
          console.log(`Server process exited with code ${code} or signal ${signal}`);
      });
  2. Clone https://github.com/talentlessguy/simple-ddos and run node demo/app.js
  3. Wait for a bit, observe the first script reporting:
      Server process exited with code 1 or signal null
      Server process closed with code 1 or signal null
  4. Try to run the server script again, observe error:
      code: 'EADDRINUSE',
      errno: -4091,
      syscall: 'listen',
      address: '::',
      port: 3000

    (you can run npx -y kill-port 3000 to forcefully kill the http-server)

Expected result

I expect http-server not to receive SIGTERM signal. I'm pretty sure that it's sending it to itself somehow?

Actual result

See in repro steps

Other information

My use-case is running cypress tests using http-server, and when I disabled cache using -c-1 - it started to fail midway. When I run tests individually - they pass, but when I run them all sequentially - the server gets sigterm signal.

I'll probably just ignore it because despite the server getting this signal, it still continues to work just fine.

This is kinda a problem when I do want to kill it tho, once all tests are done. Because tree-kill npm module that I use normally to kill http-server, doesn't work in this scenario.

github-actions[bot] commented 1 year ago

This issue has been inactive for 180 days