github.com/titanous/docker@v1.4.1/utils/timeoutconn.go (about)

     1  package utils
     2  
     3  import (
     4  	"net"
     5  	"time"
     6  )
     7  
     8  func NewTimeoutConn(conn net.Conn, timeout time.Duration) net.Conn {
     9  	return &TimeoutConn{conn, timeout}
    10  }
    11  
    12  // A net.Conn that sets a deadline for every Read or Write operation
    13  type TimeoutConn struct {
    14  	net.Conn
    15  	timeout time.Duration
    16  }
    17  
    18  func (c *TimeoutConn) Read(b []byte) (int, error) {
    19  	if c.timeout > 0 {
    20  		err := c.Conn.SetReadDeadline(time.Now().Add(c.timeout))
    21  		if err != nil {
    22  			return 0, err
    23  		}
    24  	}
    25  	return c.Conn.Read(b)
    26  }