aboutsummaryrefslogtreecommitdiff
path: root/client.go
diff options
context:
space:
mode:
authorGravatar fare83 <86996242+fare83@users.noreply.github.com> 2022-07-06 20:03:50 +0800
committerGravatar GitHub <noreply@github.com> 2022-07-06 14:03:50 +0200
commitc94be05897cb48e1fb4ab4d15343cc055b8c1166 (patch)
tree0e3b97533278954dcc4418476d0f513202f87e0a /client.go
parentClose new connections after 5s in closeIdleConns (diff)
downloadfasthttp-c94be05897cb48e1fb4ab4d15343cc055b8c1166.tar.gz
fasthttp-c94be05897cb48e1fb4ab4d15343cc055b8c1166.tar.bz2
fasthttp-c94be05897cb48e1fb4ab4d15343cc055b8c1166.zip
use timeout insteadof read/writetimeout when timeout lower than read/… (#1336)
* use timeout insteadof read/writetimeout when timeout lower than read/writetimeout * use deadtime; fix test timeout; Co-authored-by: 徐焱 <xuyan4@staff.sina.com.cn>
Diffstat (limited to 'client.go')
-rw-r--r--client.go25
1 files changed, 21 insertions, 4 deletions
diff --git a/client.go b/client.go
index e2d8ec7..42f0bce 100644
--- a/client.go
+++ b/client.go
@@ -1418,6 +1418,11 @@ func (c *HostClient) doNonNilReqResp(req *Request, resp *Response) (bool, error)
return err == nil, err
}
+ var deadline time.Time
+ if req.timeout > 0 {
+ deadline = time.Now().Add(req.timeout)
+ }
+
cc, err := c.acquireConn(req.timeout, req.ConnectionClose())
if err != nil {
return false, err
@@ -1426,11 +1431,17 @@ func (c *HostClient) doNonNilReqResp(req *Request, resp *Response) (bool, error)
resp.parseNetConn(conn)
+ writeDeadline := deadline
if c.WriteTimeout > 0 {
+ tmpWriteDeadline := time.Now().Add(c.WriteTimeout)
+ if writeDeadline.IsZero() || tmpWriteDeadline.Before(writeDeadline) {
+ writeDeadline = tmpWriteDeadline
+ }
+ }
+ if !writeDeadline.IsZero() {
// Set Deadline every time, since golang has fixed the performance issue
// See https://github.com/golang/go/issues/15133#issuecomment-271571395 for details
- currentTime := time.Now()
- if err = conn.SetWriteDeadline(currentTime.Add(c.WriteTimeout)); err != nil {
+ if err = conn.SetWriteDeadline(writeDeadline); err != nil {
c.closeConn(cc)
return true, err
}
@@ -1459,11 +1470,17 @@ func (c *HostClient) doNonNilReqResp(req *Request, resp *Response) (bool, error)
return true, err
}
+ readDeadline := deadline
if c.ReadTimeout > 0 {
+ tmpReadDeadline := time.Now().Add(c.ReadTimeout)
+ if readDeadline.IsZero() || tmpReadDeadline.Before(readDeadline) {
+ readDeadline = tmpReadDeadline
+ }
+ }
+ if !readDeadline.IsZero() {
// Set Deadline every time, since golang has fixed the performance issue
// See https://github.com/golang/go/issues/15133#issuecomment-271571395 for details
- currentTime := time.Now()
- if err = conn.SetReadDeadline(currentTime.Add(c.ReadTimeout)); err != nil {
+ if err = conn.SetReadDeadline(readDeadline); err != nil {
c.closeConn(cc)
return true, err
}