123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- package kcp
- import (
- "sync/atomic"
- "github.com/pkg/errors"
- )
- func (s *UDPSession) defaultReadLoop() {
- buf := make([]byte, mtuLimit)
- var src string
- for {
- if n, addr, err := s.conn.ReadFrom(buf); err == nil {
- // make sure the packet is from the same source
- if src == "" { // set source address
- src = addr.String()
- } else if addr.String() != src {
- atomic.AddUint64(&DefaultSnmp.InErrs, 1)
- continue
- }
- if n >= s.headerSize+IKCP_OVERHEAD {
- s.packetInput(buf[:n])
- } else {
- atomic.AddUint64(&DefaultSnmp.InErrs, 1)
- }
- } else {
- s.notifyReadError(errors.WithStack(err))
- return
- }
- }
- }
- func (l *Listener) defaultMonitor() {
- buf := make([]byte, mtuLimit)
- for {
- if n, from, err := l.conn.ReadFrom(buf); err == nil {
- if n >= l.headerSize+IKCP_OVERHEAD {
- l.packetInput(buf[:n], from)
- } else {
- atomic.AddUint64(&DefaultSnmp.InErrs, 1)
- }
- } else {
- l.notifyReadError(errors.WithStack(err))
- return
- }
- }
- }
|