8 "github.com/go-redis/redis/internal/proto"
11 var noDeadline = time.Time{}
25 func NewConn(netConn net.Conn) *Conn {
29 cn.rd = proto.NewReader(netConn)
30 cn.wr = proto.NewWriter(netConn)
31 cn.SetUsedAt(time.Now())
35 func (cn *Conn) UsedAt() time.Time {
36 return cn.usedAt.Load().(time.Time)
39 func (cn *Conn) SetUsedAt(tm time.Time) {
43 func (cn *Conn) SetNetConn(netConn net.Conn) {
49 func (cn *Conn) setReadTimeout(timeout time.Duration) error {
53 return cn.netConn.SetReadDeadline(now.Add(timeout))
55 return cn.netConn.SetReadDeadline(noDeadline)
58 func (cn *Conn) setWriteTimeout(timeout time.Duration) error {
62 return cn.netConn.SetWriteDeadline(now.Add(timeout))
64 return cn.netConn.SetWriteDeadline(noDeadline)
67 func (cn *Conn) Write(b []byte) (int, error) {
68 return cn.netConn.Write(b)
71 func (cn *Conn) RemoteAddr() net.Addr {
72 return cn.netConn.RemoteAddr()
75 func (cn *Conn) WithReader(timeout time.Duration, fn func(rd *proto.Reader) error) error {
76 _ = cn.setReadTimeout(timeout)
80 func (cn *Conn) WithWriter(timeout time.Duration, fn func(wr *proto.Writer) error) error {
81 _ = cn.setWriteTimeout(timeout)
85 if err != nil && firstErr == nil {
91 func (cn *Conn) Close() error {
92 return cn.netConn.Close()