| 123456789101112131415161718192021222324252627282930313233343536373839404142 | 
							- package net
 
- import (
 
- 	"net"
 
- 	"time"
 
- )
 
- var (
 
- 	emptyTime time.Time
 
- )
 
- type TimeOutReader struct {
 
- 	timeout    int
 
- 	connection net.Conn
 
- }
 
- func NewTimeOutReader(timeout int, connection net.Conn) *TimeOutReader {
 
- 	return &TimeOutReader{
 
- 		timeout:    timeout,
 
- 		connection: connection,
 
- 	}
 
- }
 
- func (reader *TimeOutReader) Read(p []byte) (n int, err error) {
 
- 	if reader.timeout > 0 {
 
- 		deadline := time.Duration(reader.timeout) * time.Second
 
- 		reader.connection.SetReadDeadline(time.Now().Add(deadline))
 
- 	}
 
- 	n, err = reader.connection.Read(p)
 
- 	if reader.timeout > 0 {
 
- 		reader.connection.SetReadDeadline(emptyTime)
 
- 	}
 
- 	return
 
- }
 
- func (reader *TimeOutReader) GetTimeOut() int {
 
- 	return reader.timeout
 
- }
 
- func (reader *TimeOutReader) SetTimeOut(value int) {
 
- 	reader.timeout = value
 
- }
 
 
  |