diff --git a/gold/link/listen.go b/gold/link/listen.go index 3008f37..7b4f21e 100644 --- a/gold/link/listen.go +++ b/gold/link/listen.go @@ -130,6 +130,12 @@ func (m *Me) listen() (conn p2p.Conn, err error) { } continue } + if n <= 0 { + if config.ShowDebugLog { + logrus.Debugln("[listen] unexpected read n =", n) + } + continue + } lq := lstnq{ index: -1, addr: addr, diff --git a/gold/link/recv.go b/gold/link/recv.go index fd42525..fedacbb 100644 --- a/gold/link/recv.go +++ b/gold/link/recv.go @@ -32,8 +32,19 @@ func (m *Me) wait(data []byte) *head.Packet { } if m.base14 { data = base14.Decode(data) + if len(data) < bound { + bound = len(data) + endl = "." + } + if config.ShowDebugLog { + logrus.Debugln("[recv] data b14ed", hex.EncodeToString(data[:bound]), endl) + } } seq, data := m.xordec(data) + if len(data) < bound { + bound = len(data) + endl = "." + } if config.ShowDebugLog { logrus.Debugln("[recv] data xored", hex.EncodeToString(data[:bound]), endl) } diff --git a/gold/p2p/tcp/pdu.go b/gold/p2p/tcp/pdu.go index c2ecdac..61b0450 100644 --- a/gold/p2p/tcp/pdu.go +++ b/gold/p2p/tcp/pdu.go @@ -63,6 +63,9 @@ func (p *packet) ReadFrom(r io.Reader) (n int64, err error) { } if binary.LittleEndian.Uint32(buf[:]) != magic { err = ErrInvalidMagic + if config.ShowDebugLog { + logrus.Debugf("[tcp] expect magic %08x but got %08x", magic, binary.LittleEndian.Uint32(buf[:])) + } return } cnt, err = io.ReadFull(r, buf[:3]) diff --git a/gold/p2p/tcp/tcp.go b/gold/p2p/tcp/tcp.go index 8a0ba47..5900d8c 100644 --- a/gold/p2p/tcp/tcp.go +++ b/gold/p2p/tcp/tcp.go @@ -258,7 +258,10 @@ func (conn *Conn) receive(tcpconn *net.TCPConn, hasvalidated bool) { if config.ShowDebugLog { logrus.Debugln("[tcp] recv from", ep, "err:", err) } - if errors.Is(err, net.ErrClosed) || errors.Is(err, io.ErrClosedPipe) || errors.Is(err, io.EOF) { + if errors.Is(err, net.ErrClosed) || + errors.Is(err, io.ErrClosedPipe) || + errors.Is(err, io.EOF) || + errors.Is(err, ErrInvalidMagic) { _ = tcpconn.CloseRead() return }