Go Socket Server 出现 EOF 错误?

我的代码:


    var connMax int = 0


    func CheckErr(err error) {

        if err != nil {

            fmt.Fprintf(os.Stderr, "Error occured: %s\n", err)

            os.Exit(1)

        }

    }


    func handler(conn net.Conn) {

        defer conn.Close()


        var buf [512]byte

        n, err := conn.Read(buf[0:])

        CheckErr(err)


        connMax += 1

        fmt.Println(connMax)


        result := bytes.NewBuffer(nil)

        result.Write(buf[0:n])


        fmt.Println(string(result.Bytes()))


        conn.Write([]byte("HTTP/1.1 201 OK\r\n"))


    func Run() {

        ln, err := net.Listen("tcp", ":8080")

        CheckErr(err)

        for {

            conn, err := ln.Accept()

            CheckErr(err)

            go handler(conn)

        }

    }

我尝试使用ab包 apache2-utils 的命令测试服务器。 ab -c 1500 -n 10000 http://127.0.0.1:8080/


完成后,发生EOF错误,因此进程退出:

http://img.mukewang.com/61d3af070001411903690152.jpg

眼眸繁星
浏览 248回答 1
1回答

慕侠2389804

io.EOF表示连接被另一端关闭。我猜是因为ab达到了打开文件描述符的限制,所以连接被关闭了。使用ulimit -a进行检查。如果小于 10000,则使用ulimit -n 65536更改它。这是为了允许超过 10000 个连接。我随机选择了65536,你需要root权限来做这个配置。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go