@@ -490,12 +490,14 @@ fn get_host_port<'u>(config: &Config, dst: &'u Uri) -> Result<(&'u str, u16), Co
490490 if dst. scheme ( ) != Some ( & Scheme :: HTTP ) {
491491 return Err ( ConnectError {
492492 msg : INVALID_NOT_HTTP . into ( ) ,
493+ addr : None ,
493494 cause : None ,
494495 } ) ;
495496 }
496497 } else if dst. scheme ( ) . is_none ( ) {
497498 return Err ( ConnectError {
498499 msg : INVALID_MISSING_SCHEME . into ( ) ,
500+ addr : None ,
499501 cause : None ,
500502 } ) ;
501503 }
@@ -505,6 +507,7 @@ fn get_host_port<'u>(config: &Config, dst: &'u Uri) -> Result<(&'u str, u16), Co
505507 None => {
506508 return Err ( ConnectError {
507509 msg : INVALID_MISSING_HOST . into ( ) ,
510+ addr : None ,
508511 cause : None ,
509512 } )
510513 }
@@ -643,6 +646,7 @@ impl<R: Resolve> Future for HttpConnecting<R> {
643646// Not publicly exported (so missing_docs doesn't trigger).
644647pub struct ConnectError {
645648 msg : & ' static str ,
649+ addr : Option < SocketAddr > ,
646650 cause : Option < Box < dyn StdError + Send + Sync > > ,
647651}
648652
@@ -653,6 +657,7 @@ impl ConnectError {
653657 {
654658 ConnectError {
655659 msg,
660+ addr : None ,
656661 cause : Some ( cause. into ( ) ) ,
657662 }
658663 }
@@ -676,6 +681,9 @@ impl fmt::Debug for ConnectError {
676681 fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
677682 let mut b = f. debug_tuple ( "ConnectError" ) ;
678683 b. field ( & self . msg ) ;
684+ if let Some ( ref addr) = self . addr {
685+ b. field ( addr) ;
686+ }
679687 if let Some ( ref cause) = self . cause {
680688 b. field ( cause) ;
681689 }
@@ -763,8 +771,9 @@ impl ConnectingTcpRemote {
763771 debug ! ( "connected to {}" , addr) ;
764772 return Ok ( tcp) ;
765773 }
766- Err ( e) => {
774+ Err ( mut e) => {
767775 trace ! ( "connect error for {}: {:?}" , addr, e) ;
776+ e. addr = Some ( addr) ;
768777 // only return the first error, we assume it's the most relevant
769778 if err. is_none ( ) {
770779 err = Some ( e) ;
0 commit comments