@@ -7,7 +7,6 @@ const util = require("util");
77const fs = require ( "graceful-fs" ) ;
88const ipaddr = require ( "ipaddr.js" ) ;
99const internalIp = require ( "internal-ip" ) ;
10- const killable = require ( "killable" ) ;
1110const express = require ( "express" ) ;
1211const { validate } = require ( "schema-utils" ) ;
1312const schema = require ( "./options.json" ) ;
@@ -61,6 +60,31 @@ class Server {
6160 return / ^ [ a - z A - Z ] [ a - z A - Z \d + \- . ] * : / . test ( URL ) ;
6261 }
6362
63+ static killable ( server ) {
64+ let sockets = [ ] ;
65+
66+ server . on ( "connection" , ( socket ) => {
67+ // add socket to list
68+ sockets . push ( socket ) ;
69+
70+ socket . once ( "close" , ( ) => {
71+ // remove socket from list
72+ sockets . splice ( sockets . indexOf ( socket ) , 1 ) ;
73+ } ) ;
74+ } ) ;
75+
76+ server . kill = ( cb ) => {
77+ server . close ( cb ) ;
78+ sockets . forEach ( ( socket ) => {
79+ socket . destroy ( ) ;
80+ } ) ;
81+ // reset so the server can be restarted
82+ sockets = [ ] ;
83+ } ;
84+
85+ return server ;
86+ }
87+
6488 static async getHostname ( hostname ) {
6589 if ( hostname === "local-ip" ) {
6690 return ( await internalIp . v4 ( ) ) || ( await internalIp . v6 ( ) ) || "0.0.0.0" ;
@@ -682,7 +706,7 @@ class Server {
682706 this . setupFeatures ( ) ;
683707 this . createServer ( ) ;
684708
685- killable ( this . server ) ;
709+ Server . killable ( this . server ) ;
686710
687711 if ( this . options . setupExitSignals ) {
688712 const signals = [ "SIGINT" , "SIGTERM" ] ;
0 commit comments