bind.go 987 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package net
  2. import "net"
  3. type bindPacketConn struct {
  4. EnhancePacketConn
  5. rAddr net.Addr
  6. }
  7. func (c *bindPacketConn) Read(b []byte) (n int, err error) {
  8. n, _, err = c.EnhancePacketConn.ReadFrom(b)
  9. return n, err
  10. }
  11. func (c *bindPacketConn) WaitRead() (data []byte, put func(), err error) {
  12. data, put, _, err = c.EnhancePacketConn.WaitReadFrom()
  13. return
  14. }
  15. func (c *bindPacketConn) Write(b []byte) (n int, err error) {
  16. return c.EnhancePacketConn.WriteTo(b, c.rAddr)
  17. }
  18. func (c *bindPacketConn) RemoteAddr() net.Addr {
  19. return c.rAddr
  20. }
  21. func (c *bindPacketConn) LocalAddr() net.Addr {
  22. if c.EnhancePacketConn.LocalAddr() == nil {
  23. return &net.UDPAddr{IP: net.IPv4zero, Port: 0}
  24. } else {
  25. return c.EnhancePacketConn.LocalAddr()
  26. }
  27. }
  28. func (c *bindPacketConn) Upstream() any {
  29. return c.EnhancePacketConn
  30. }
  31. func NewBindPacketConn(pc net.PacketConn, rAddr net.Addr) net.Conn {
  32. return &bindPacketConn{
  33. EnhancePacketConn: NewEnhancePacketConn(pc),
  34. rAddr: rAddr,
  35. }
  36. }