diff --git a/client/client.go b/client/client.go index d96f44af..870816b1 100644 --- a/client/client.go +++ b/client/client.go @@ -40,6 +40,7 @@ type QQClient struct { decoders map[string]func(*QQClient, uint16, []byte) (interface{}, error) handlers sync.Map + server *net.TCPAddr syncCookie []byte pubAccountCookie []byte @@ -616,7 +617,10 @@ var servers = []*net.TCPAddr{ } func (c *QQClient) connect() error { - conn, err := net.DialTCP("tcp", nil, servers[rand.Intn(len(servers))]) + if c.server == nil { + c.server = servers[rand.Intn(len(servers))] + } + conn, err := net.DialTCP("tcp", nil, c.server) if err != nil { return err } diff --git a/utils/ttl.go b/utils/ttl.go index 4248e900..9a7c6d42 100644 --- a/utils/ttl.go +++ b/utils/ttl.go @@ -40,7 +40,7 @@ func NewTTList(ttl int64) *TTList { func (l *TTList) Add(i interface{}) { l.lock.Lock() - l.lock.Unlock() + defer l.lock.Unlock() l.list = append(l.list, &item{ i: i, lastAccess: time.Now().Unix(), @@ -49,7 +49,7 @@ func (l *TTList) Add(i interface{}) { func (l *TTList) Any(filter func(i interface{}) bool) bool { l.lock.Lock() - l.lock.Unlock() + defer l.lock.Unlock() for _, it := range l.list { if filter(it.i) { it.lastAccess = time.Now().Unix()