pconn.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package mux
  2. import (
  3. "net"
  4. "time"
  5. )
  6. type PortConn struct {
  7. Conn net.Conn
  8. rs []byte
  9. start int
  10. }
  11. func newPortConn(conn net.Conn, rs []byte) *PortConn {
  12. return &PortConn{
  13. Conn: conn,
  14. rs: rs,
  15. }
  16. }
  17. func (pConn *PortConn) Read(b []byte) (n int, err error) {
  18. if len(b) < len(pConn.rs)-pConn.start {
  19. defer func() {
  20. pConn.start = pConn.start + len(b)
  21. }()
  22. return copy(b, pConn.rs), nil
  23. }
  24. if pConn.start < len(pConn.rs) {
  25. defer func() {
  26. pConn.start = len(pConn.rs)
  27. }()
  28. return copy(b, pConn.rs[pConn.start:]), nil
  29. }
  30. return pConn.Conn.Read(b)
  31. }
  32. func (pConn *PortConn) Write(b []byte) (n int, err error) {
  33. return pConn.Conn.Write(b)
  34. }
  35. func (pConn *PortConn) Close() error {
  36. return pConn.Conn.Close()
  37. }
  38. func (pConn *PortConn) LocalAddr() net.Addr {
  39. return pConn.Conn.LocalAddr()
  40. }
  41. func (pConn *PortConn) RemoteAddr() net.Addr {
  42. return pConn.Conn.RemoteAddr()
  43. }
  44. func (pConn *PortConn) SetDeadline(t time.Time) error {
  45. return pConn.Conn.SetDeadline(t)
  46. }
  47. func (pConn *PortConn) SetReadDeadline(t time.Time) error {
  48. return pConn.Conn.SetReadDeadline(t)
  49. }
  50. func (pConn *PortConn) SetWriteDeadline(t time.Time) error {
  51. return pConn.Conn.SetWriteDeadline(t)
  52. }