@@ -411,6 +411,15 @@ export class proxyServer {
411411 this . server = Net . createServer ( socket => {
412412 const ip = socket . remoteAddress
413413 this . clientSockets . add ( socket )
414+
415+ socket . setTimeout ( 15_000 )
416+
417+ socket . on ( 'timeout' , ( ) => {
418+ // 空闲太久,优雅结束;再给一点时间,不行就摧毁
419+ socket . end ( ) ;
420+ socket . setTimeout ( 3_000 , ( ) => socket . destroy ( ) )
421+ } )
422+
414423 const isWhiteIp = this . whiteIpList . find ( n => { return n === ip } ) ? true : false
415424 let agent = 'Mozilla/5.0'
416425 // windows 7 GET PAC User-Agent: Mozilla/5.0 (compatible; IE 11.0; Win32; Trident/7.0)
@@ -576,13 +585,26 @@ export class proxyServer {
576585
577586 public end = ( ) => new Promise ( resolve => {
578587 if ( this . server !== null ) {
588+
579589 this . server . close ( err => {
580590 resolve ( true )
581591 } )
582592
583- setTimeout ( ( ) => {
584- resolve ( true )
585- } , 6000 )
593+ // 2) 尝试优雅结束现有连接
594+ for ( const socket of this . clientSockets ) {
595+ // 让对端尽快收 FIN,别再 keep-alive
596+ socket . end ( ) ;
597+ // 给每个 socket 一个短兜底
598+ socket . setTimeout ( 3_000 , ( ) => socket . destroy ( ) ) ;
599+ }
600+
601+ // 3) 总兜底:到点还没关完就全毁
602+ setTimeout ( ( ) => {
603+ for ( const socket of this . clientSockets ) {
604+ // 仍未关闭的连接强制销毁
605+ socket . destroy ( )
606+ }
607+ } , 10_000 )
586608
587609 }
588610 } )
@@ -628,8 +650,7 @@ const test = () => {
628650 "domain" : "B4CB0A41352E9BDF.conet.network"
629651 } ]
630652
631- const privateKey = '0xa64aa6631f218150c1810f4856c12940e209ac3d4060fa24395d74a0754a2773 '
653+ const privateKey = ''
632654
633655 new proxyServer ( '3003' , entryNodes , egressNodes , privateKey , true , '' )
634- }
635- test ( )
656+ }
0 commit comments