pconn.go 1.3 KB

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