Skip to content

服务端恢复session时,恢复rcv_nxt(让服务端可以继续read)是否可行 #267

@ianzhang1988

Description

@ianzhang1988

发现下面的代码在服务端重启时,客户端上报的sn和服务端的rcv_nxt不一致,导致服务端恢复的连接无法read客户端数据。

在代码增加恢复服务端rcv_nxt是否可行呢?(下面代码注释部分)

https://github.com/xtaci/kcp-go/blob/e026777b9cb8afa9ce8a963f3e54ffccaf03f6a1/sess.go#L838C3-L847C4

                if s == nil && convRecovered { // new session
                        if len(l.chAccepts) < cap(l.chAccepts) { // do not let the new sessions overwhelm accept queue
                                s := newUDPSession(conv, l.dataShards, l.parityShards, l, l.conn, false, addr, l.block)
                                s.kcpInput(data)
                                // s.kcp.rcv_nxt = sn // 这里可以使恢复的连接继续接受客户端数据
                                l.sessionLock.Lock()
                                l.sessions[addr.String()] = s
                                l.sessionLock.Unlock()
                                l.chAccepts <- s
                        }
                }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions