diff --git a/client/client.go b/client/client.go index 44d9be5..aa1858e 100644 --- a/client/client.go +++ b/client/client.go @@ -1,6 +1,7 @@ package client import ( + "context" "crypto/tls" "crypto/x509" "io" @@ -177,7 +178,20 @@ func (c *Client) handle(conn net.Conn) { Err: make(chan error, 1), } - c.connReqChan <- connReq + timeoutCtx := context.Background() + if c.config.Timeout.Duration > 0 { + timeoutCtx, _ = context.WithTimeout(context.Background(), c.config.Timeout.Duration) + } + + select { + case <-timeoutCtx.Done(): + log.Printf("dial queue is full") + socks.Handshake(libsocks.TTLExpired) + socks.Close() + return + + case c.connReqChan <- connReq: + } var l link.Link diff --git a/cmd/version.go b/cmd/version.go index 41c8fcb..0f88a9c 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -1,3 +1,3 @@ package cmd -const version = "0.10.4" +const version = "0.10.5"