package main import ( "net" "time" ) type tListener struct { net.Listener ReadTimeout time.Duration WriteTimeout time.Duration } func (l *tListener) Accept() (net.Conn, error) { c, err := l.Listener.Accept() if err != nil { return nil, err } tc := &tConn{ Conn: c, ReadTimeout: l.ReadTimeout, WriteTimeout: l.WriteTimeout, } return tc, nil } type tConn struct { net.Conn ReadTimeout time.Duration WriteTimeout time.Duration } func (c *tConn) Read(b []byte) (n int, err error) { err = c.Conn.SetReadDeadline(time.Now().Add(c.ReadTimeout)) if err != nil { return 0, err } n, err = c.Conn.Read(b) return } func (c *tConn) Write(b []byte) (n int, err error) { err = c.Conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout)) if err != nil { return } n, err = c.Conn.Write(b) return }