Skip to content

stream 关闭后,session.AcceptStream阻塞了 #104

@nelojass

Description

@nelojass

server部分代码

//conn为UDPSession

sess, err := smux.Server(conn, smuxConfig)
if err != nil {
	log.Println("smux server err:", err)
	return
}

	//go func() {
	defer func() {
		sess.Close()
		conn.Close()
	}()

for {
	stream, err := sess.AcceptStream()
	if err != nil {
		log.Println("sumx accept err:", err)
		if err, ok := err.(net.Error); ok && err.Temporary() {
			continue
		}
		break
	}
	go func() {
		defer func() {
			log.Printf("server end stream %08x:%d", conn.GetConv(), stream.ID())
			stream.Close()
		}()
		log.Printf("server begin stream %08x:%d", conn.GetConv(), stream.ID())
		SendOneKcpConnection(stream)
	}()
}

sess创建自一个kcp.UdpSession:
sess, err := smux.Server(conn, smuxConfig)
我的client和server都是已经关闭了stream的

但是我发现在关闭之后,AcceptStream一直阻塞知道smux超时才返回一个io: read/write on closed pipe
通过抓包我看到了smux确实已经互相发了fin包,但是这里一直阻塞的原因不太清楚

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