@@ -18,6 +18,7 @@ var connectArgs struct {
1818 killSSHDuration time.Duration
1919 waitBeforeRequestDuration time.Duration
2020 responseTimeout time.Duration
21+ dialTimeout time.Duration
2122 endpoint netssh.Endpoint
2223
2324}
@@ -29,12 +30,19 @@ var connectCmd = &cobra.Command{
2930
3031 log := log .New (os .Stdout , "" , log .Ltime | log .Lmicroseconds | log .Lshortfile )
3132
33+ log .Print ("dialing %#v" , connectArgs .endpoint )
34+ log .Printf ("timeout %s" , connectArgs .dialTimeout )
3235 ctx := netssh .ContextWithLog (context .TODO (), log )
3336 ctx = rwccmd .ContextWithLog (ctx , log )
34- outstream , err := netssh .Dial (ctx , connectArgs .endpoint )
35- if err != nil {
37+ dialCtx , dialCancel := context .WithTimeout (ctx , connectArgs .dialTimeout )
38+ outstream , err := netssh .Dial (dialCtx , connectArgs .endpoint )
39+ dialCancel ()
40+ if err == context .DeadlineExceeded {
41+ log .Panic ("dial timeout exceeded" )
42+ } else if err != nil {
3643 log .Panic (err )
3744 }
45+
3846 defer func () {
3947 log .Printf ("closing connection in defer" )
4048 err := outstream .Close ()
@@ -86,6 +94,7 @@ func init() {
8694 connectCmd .Flags ().DurationVar (& connectArgs .killSSHDuration , "killSSH" ,0 , "" )
8795 connectCmd .Flags ().DurationVar (& connectArgs .waitBeforeRequestDuration , "wait" ,0 , "" )
8896 connectCmd .Flags ().DurationVar (& connectArgs .responseTimeout , "responseTimeout" ,math .MaxInt64 , "" )
97+ connectCmd .Flags ().DurationVar (& connectArgs .dialTimeout , "dialTimeout" ,math .MaxInt64 , "" )
8998 connectCmd .Flags ().StringVar (& connectArgs .endpoint .Host , "ssh.host" , "" , "" )
9099 connectCmd .Flags ().StringVar (& connectArgs .endpoint .User , "ssh.user" , "" , "" )
91100 connectCmd .Flags ().StringVar (& connectArgs .endpoint .IdentityFile , "ssh.identity" , "" , "" )
0 commit comments