| package timeoutconn | |
| import ( | |
| "net" | |
| "time" | |
| ) | |
| func New(netConn net.Conn, timeout time.Duration) net.Conn { | |
| return &conn{netConn, timeout} | |
| } | |
| // A net.Conn that sets a deadline for every Read or Write operation | |
| type conn struct { | |
| net.Conn | |
| timeout time.Duration | |
| } | |
| func (c *conn) Read(b []byte) (int, error) { | |
| if c.timeout > 0 { | |
| if err := c.Conn.SetReadDeadline(time.Now().Add(c.timeout)); err != nil { | |
| return 0, err | |
| } | |
| } | |
| return c.Conn.Read(b) | |
| } |