diff --git a/client/client.go b/client/client.go index 1c4c1674..fb8c09ca 100644 --- a/client/client.go +++ b/client/client.go @@ -1053,7 +1053,7 @@ func (c *QQClient) netLoop() { pkt, err := packets.ParseIncomingPacket(data, c.sigInfo.d2Key) if err != nil { c.Error("parse incoming packet error: %v", err) - if err == packets.ErrSessionExpired { + if err == packets.ErrSessionExpired || err == packets.ErrPacketDropped { break } errCount++ diff --git a/protocol/packets/global.go b/protocol/packets/global.go index cccdc0fb..167314fa 100644 --- a/protocol/packets/global.go +++ b/protocol/packets/global.go @@ -11,6 +11,7 @@ var ErrUnknownFlag = errors.New("unknown flag") var ErrInvalidPayload = errors.New("invalid payload") var ErrDecryptFailed = errors.New("decrypt failed") var ErrSessionExpired = errors.New("session expired") +var ErrPacketDropped = errors.New("packet dropped") type ISendingPacket interface { CommandId() uint16 @@ -121,7 +122,7 @@ func ParseIncomingPacket(payload, d2key []byte) (*IncomingPacket, error) { func parseSsoFrame(payload []byte, flag2 byte) (*IncomingPacket, error) { reader := binary.NewReader(payload) if reader.ReadInt32()-4 > int32(reader.Len()) { - return nil, errors.New("dropped") + return nil, ErrPacketDropped } seqId := reader.ReadInt32() retCode := reader.ReadInt32()