forked from mirror/redis
internal: return an error on setting deadline
This commit is contained in:
parent
d02c6f40dc
commit
eaeb8f2a08
|
@ -58,23 +58,31 @@ func (cn *Conn) RemoteAddr() net.Addr {
|
|||
}
|
||||
|
||||
func (cn *Conn) WithReader(ctx context.Context, timeout time.Duration, fn func(rd *proto.Reader) error) error {
|
||||
tm := cn.deadline(ctx, timeout)
|
||||
_ = cn.netConn.SetReadDeadline(tm)
|
||||
err := cn.netConn.SetReadDeadline(cn.deadline(ctx, timeout))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return fn(cn.rd)
|
||||
}
|
||||
|
||||
func (cn *Conn) WithWriter(
|
||||
ctx context.Context, timeout time.Duration, fn func(wr *proto.Writer) error,
|
||||
) error {
|
||||
tm := cn.deadline(ctx, timeout)
|
||||
_ = cn.netConn.SetWriteDeadline(tm)
|
||||
|
||||
firstErr := fn(cn.wr)
|
||||
err := cn.wr.Flush()
|
||||
if err != nil && firstErr == nil {
|
||||
firstErr = err
|
||||
err := cn.netConn.SetWriteDeadline(cn.deadline(ctx, timeout))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return firstErr
|
||||
|
||||
if cn.wr.Buffered() > 0 {
|
||||
cn.wr.Reset(cn.netConn)
|
||||
}
|
||||
|
||||
err = fn(cn.wr)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return cn.wr.Flush()
|
||||
}
|
||||
|
||||
func (cn *Conn) Close() error {
|
||||
|
|
|
@ -152,6 +152,10 @@ func (w *Writer) crlf() error {
|
|||
return w.wr.WriteByte('\n')
|
||||
}
|
||||
|
||||
func (w *Writer) Buffered() int {
|
||||
return w.wr.Buffered()
|
||||
}
|
||||
|
||||
func (w *Writer) Reset(wr io.Writer) {
|
||||
w.wr.Reset(wr)
|
||||
}
|
||||
|
|
|
@ -343,6 +343,14 @@ type badConn struct {
|
|||
|
||||
var _ net.Conn = &badConn{}
|
||||
|
||||
func (cn *badConn) SetReadDeadline(t time.Time) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cn *badConn) SetWriteDeadline(t time.Time) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cn *badConn) Read([]byte) (int, error) {
|
||||
if cn.readDelay != 0 {
|
||||
time.Sleep(cn.readDelay)
|
||||
|
|
Loading…
Reference in New Issue