@@ -556,19 +556,43 @@ Ajax.prototype.doRequest = function(opt) {
556
556
request . once ( 'socket' , function ( socket ) {
557
557
if ( socket . remoteAddress ) {
558
558
this . remoteIp = socket . remoteAddress ;
559
+ logger . debug ( `${ logPre } socket reuse ${ socket . remoteAddress } :${ socket . remotePort } ` ) ;
559
560
return ;
560
561
}
561
562
563
+ const onError = ( err ) => {
564
+ logger . error ( logPre + err . stack ) ;
565
+ clean ( ) ;
566
+ this . emit ( 'fail' ) ;
567
+ } ;
568
+
569
+ const onConnect = function ( ) {
570
+ logger . debug ( `${ logPre } connect ${ this . remoteAddress } :${ this . remotePort } ` ) ;
571
+ clean ( ) ;
572
+ } ;
573
+
574
+ const onLookup = ( err , address , family , host ) => {
575
+ if ( err ) {
576
+ logger . error ( logPre + err . stack ) ;
577
+ clean ( ) ;
578
+ this . emit ( 'fail' ) ;
579
+ return ;
580
+ }
581
+ this . remoteIp = address ;
582
+ } ;
583
+
584
+ const clean = function ( ) {
585
+ socket . removeListener ( 'error' , onError ) ;
586
+ socket . removeListener ( 'connect' , onConnect ) ;
587
+ socket . removeListener ( 'lookup' , onLookup ) ;
588
+ } ;
589
+
562
590
if ( ! net . isIP ( opt . host ) ) {
563
- socket . once ( 'lookup' , ( err , address , family , host ) => {
564
- if ( err ) {
565
- logger . error ( logPre + err . stack ) ;
566
- this . emit ( 'fail' ) ;
567
- return ;
568
- }
569
- this . remoteIp = address ;
570
- } ) ;
591
+ socket . once ( 'lookup' , onLookup ) ;
571
592
}
593
+
594
+ socket . once ( 'connect' , onConnect ) ;
595
+ socket . once ( 'error' , onError ) ;
572
596
} ) ;
573
597
574
598
defer . always ( function ( ) {
0 commit comments