cloudwego / netpoll

A high-performance non-blocking I/O networking framework focusing on RPC scenarios.
Apache License 2.0
4.06k stars 470 forks source link

client connection has been closed by peer #363

Open lkxiaolou opened 1 month ago

lkxiaolou commented 1 month ago

Describe the bug 仅使用 netpoll client 进行建连,当 server 设置 ReadTimeout 比较小时,例如这样:

// server
func main() {
    s := http.Server{
        ReadTimeout: time.Millisecond,
    }

    ln, err := net.Listen("tcp", ":8000")
    if err != nil {
        panic(err)
    }
    s.Serve(ln)
}

// client
dialer := netpoll.NewDialer()
conn, err := dialer.DialTimeout("tcp", "127.0.0.1:8000", 2*time.Second)

client 压力大,调度慢时出现 client connection has been closed by peer 报错,原生 net 则不会

huzhao37 commented 1 month ago

这是一封自动回复邮件。已经收到您的来信,我会尽快回复。

joway commented 1 month ago

@lkxiaolou “原生 net 则不会” 是没有这个报错还是其他报错?从你的代码看,server 在 1 ms 内没有收到请求就要关闭连接,所以netpoll 报这个错误是符合预期的?

image
joway commented 1 month ago

一般你作为 server,这个值就不应该设置成 1ms 这么小

lkxiaolou commented 1 month ago

一般你作为 server,这个值就不应该设置成 1ms 这么小

后续读写报错符合预期,但建立连接不应该报错

joway commented 1 month ago

@lkxiaolou https://github.com/cloudwego/netpoll/pull/364 可以试试看这个分支是否还有你的这个问题吗?