@@ -18,6 +18,7 @@ var connectArgs struct {
18
18
killSSHDuration time.Duration
19
19
waitBeforeRequestDuration time.Duration
20
20
responseTimeout time.Duration
21
+ dialTimeout time.Duration
21
22
endpoint netssh.Endpoint
22
23
23
24
}
@@ -29,12 +30,19 @@ var connectCmd = &cobra.Command{
29
30
30
31
log := log .New (os .Stdout , "" , log .Ltime | log .Lmicroseconds | log .Lshortfile )
31
32
33
+ log .Print ("dialing %#v" , connectArgs .endpoint )
34
+ log .Printf ("timeout %s" , connectArgs .dialTimeout )
32
35
ctx := netssh .ContextWithLog (context .TODO (), log )
33
36
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 {
36
43
log .Panic (err )
37
44
}
45
+
38
46
defer func () {
39
47
log .Printf ("closing connection in defer" )
40
48
err := outstream .Close ()
@@ -86,6 +94,7 @@ func init() {
86
94
connectCmd .Flags ().DurationVar (& connectArgs .killSSHDuration , "killSSH" ,0 , "" )
87
95
connectCmd .Flags ().DurationVar (& connectArgs .waitBeforeRequestDuration , "wait" ,0 , "" )
88
96
connectCmd .Flags ().DurationVar (& connectArgs .responseTimeout , "responseTimeout" ,math .MaxInt64 , "" )
97
+ connectCmd .Flags ().DurationVar (& connectArgs .dialTimeout , "dialTimeout" ,math .MaxInt64 , "" )
89
98
connectCmd .Flags ().StringVar (& connectArgs .endpoint .Host , "ssh.host" , "" , "" )
90
99
connectCmd .Flags ().StringVar (& connectArgs .endpoint .User , "ssh.user" , "" , "" )
91
100
connectCmd .Flags ().StringVar (& connectArgs .endpoint .IdentityFile , "ssh.identity" , "" , "" )
0 commit comments