timeout_conn.go 545 B

123456789101112131415161718192021222324252627282930
  1. package transport
  2. import (
  3. "net"
  4. "time"
  5. )
  6. type timeoutConn struct {
  7. net.Conn
  8. wtimeoutd time.Duration
  9. rdtimeoutd time.Duration
  10. }
  11. func (c timeoutConn) Write(b []byte) (n int, err error) {
  12. if c.wtimeoutd > 0 {
  13. if err := c.SetWriteDeadline(time.Now().Add(c.wtimeoutd)); err != nil {
  14. return 0, err
  15. }
  16. }
  17. return c.Conn.Write(b)
  18. }
  19. func (c timeoutConn) Read(b []byte) (n int, err error) {
  20. if c.rdtimeoutd > 0 {
  21. if err := c.SetReadDeadline(time.Now().Add(c.rdtimeoutd)); err != nil {
  22. return 0, err
  23. }
  24. }
  25. return c.Conn.Read(b)
  26. }