readloop.go 977 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package kcp
  2. import (
  3. "sync/atomic"
  4. "github.com/pkg/errors"
  5. )
  6. func (s *UDPSession) defaultReadLoop() {
  7. buf := make([]byte, mtuLimit)
  8. var src string
  9. for {
  10. if n, addr, err := s.conn.ReadFrom(buf); err == nil {
  11. // make sure the packet is from the same source
  12. if src == "" { // set source address
  13. src = addr.String()
  14. } else if addr.String() != src {
  15. atomic.AddUint64(&DefaultSnmp.InErrs, 1)
  16. continue
  17. }
  18. if n >= s.headerSize+IKCP_OVERHEAD {
  19. s.packetInput(buf[:n])
  20. } else {
  21. atomic.AddUint64(&DefaultSnmp.InErrs, 1)
  22. }
  23. } else {
  24. s.notifyReadError(errors.WithStack(err))
  25. return
  26. }
  27. }
  28. }
  29. func (l *Listener) defaultMonitor() {
  30. buf := make([]byte, mtuLimit)
  31. for {
  32. if n, from, err := l.conn.ReadFrom(buf); err == nil {
  33. if n >= l.headerSize+IKCP_OVERHEAD {
  34. l.packetInput(buf[:n], from)
  35. } else {
  36. atomic.AddUint64(&DefaultSnmp.InErrs, 1)
  37. }
  38. } else {
  39. l.notifyReadError(errors.WithStack(err))
  40. return
  41. }
  42. }
  43. }