code: func (c *Client) CallTimeout(request interface{}, timeout time.Duration) (response interface{}, err error) {
  	var m *AsyncResult
  	if m, err = c.callAsync(request, false, true); err != nil {
  		return nil, err
  	}
  
  	t := acquireTimer(timeout)
  
  	select {
  	case <-m.Done:
  		response, err = m.Response, m.Error
  		releaseAsyncResult(m)
  	case <-t.C:
  		m.Cancel()
  		err = getClientTimeoutError(c, timeout)
  	}
  
  	releaseTimer(t)
  	return
  }
docs: // CallTimeout sends the given request to the server and obtains response
  // from the server.
  // Returns non-nil error if the response cannot be obtained during
  // the given timeout or server connection problems occur.
  // The returned error can be casted to ClientError.
  //
  // Request and response types may be arbitrary. All the request and response
  // types the client may use must be registered via RegisterType() before
  // starting the client.
  // There is no need in registering base Go types such as int, string, bool,
  // float64, etc. or arrays, slices and maps containing base Go types.
  //
  // Hint: use Dispatcher for distinct calls' construction.
  //
  // Don't forget starting the client with Client.Start() before calling Client.Call().