diff options
author | fare83 <86996242+fare83@users.noreply.github.com> | 2022-07-06 20:03:50 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-06 14:03:50 +0200 |
commit | c94be05897cb48e1fb4ab4d15343cc055b8c1166 (patch) | |
tree | 0e3b97533278954dcc4418476d0f513202f87e0a /client.go | |
parent | Close new connections after 5s in closeIdleConns (diff) | |
download | fasthttp-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.go | 25 |
1 files changed, 21 insertions, 4 deletions
@@ -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 } |