| 90 | } |
| 91 | |
| 92 | func (r *connReader) Read(b []byte) (int, error) { |
| 93 | if timeout := r.ReaderTimeout; timeout != 0 { |
| 94 | if err := r.Sock.SetReadDeadline(time.Now().Add(timeout)); err != nil { |
| 95 | return 0, errors.Trace(err) |
| 96 | } |
| 97 | r.hasDeadline = true |
| 98 | } else if r.hasDeadline { |
| 99 | if err := r.Sock.SetReadDeadline(time.Time{}); err != nil { |
| 100 | return 0, errors.Trace(err) |
| 101 | } |
| 102 | r.hasDeadline = false |
| 103 | } |
| 104 | n, err := r.Sock.Read(b) |
| 105 | if err != nil { |
| 106 | err = errors.Trace(err) |
| 107 | } |
| 108 | return n, err |
| 109 | } |
| 110 | |
| 111 | type connWriter struct { |
| 112 | *Conn |