Closed WSitong closed 8 months ago
我有一个想法是在旧seesion被新session替换后,再启动一个协程调用下面这个函数,确保所有stream关闭后立即关闭旧session。但是这样就需要维护一个切片保存每个session的所有stream。不知道这样做是不是多余。
func closeSessionAfterTheStreamsClosed(session *smux.Session, streams []*smux.Stream) {
if streams != nil {
for _, stream := range streams {
if stream != nil {
<-stream.GetDieCh()
}
}
}
if session != nil && !session.IsClosed() {
session.Close()
}
}
抱歉,我发现最后面有个scavenger函数在做定时清理。
kcptun/client/main.go第477行:muxes[idx].session = waitConn(),这里没有关闭旧session,我猜想可能是存在还在使用的stream。但是它会在什么时机关闭,还是它在等待服务端关闭?可是服务端要在acceptStream出错时才会关闭。